工廠方法模式
工廠方法模式是我們開發(fā)中使用最廣泛的設計模式之一,不說無聊的定義狠鸳,直接看例子
一、工廠方法模式的四大模塊:
1悯嗓、抽象工廠 --- 一個抽象類件舵,有一個生產產品(女朋友)的抽象方法,由具體工廠實現(xiàn)脯厨。
2铅祸、具體工廠 --- 繼承抽象工廠類,生產何種產品(你是要國產還是要日韓還是要歐美由你定)的具體實現(xiàn)合武。
3临梗、抽象產品 --- 一個抽象類,提供一個抽象方法稼跳,由具體產品實現(xiàn)盟庞。
4、具體產品 -- 哈哈岂贩,你懂的茫经。
以上解釋看不懂?沒關系萎津,看代碼:
二卸伞、工廠方法模式的通用代碼
1、抽象工廠類
//抽象工廠
public abstract class Factory {
public abstract Product createProduct();
}
2锉屈、具體工廠
public class ProductFactory extends Factory {
@Override
public Product createProduct() {
return new GirlFriendProduct();
//return new BoyFriendProduct();
}
}
3荤傲、抽象產品
public abstract class Product {
public abstract void createProduct();
}
4、具體的產品
//生產女朋友
public class GirlFriendProduct extends Product {
@Override
public void createProduct() {
System.out.println("product======冰冰");
}
}
//生產男朋友
public class BoyFriendProduct extends Product{
@Override
public void createProduct() {
System.out.println("product======小鮮肉");
}
}
接下來看看在代碼中的使用
public class FactoryActivity extends AppCompatActivity {
private Product mProduct;
private Factory mFactory;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_factory);
mFactory = new ProductFactory();
mProduct = mFactory.createProduct();
}
//生產一個朋友
public void clickCreate(View view) {
mProduct.createProduct();
}
}
點擊按鈕颈渊,生產一個朋友遂黍,看看控制臺日志輸出:
product======冰冰
好了,到此為止俊嗽,一個通用的工廠方法模式的代碼就寫完了雾家。不過可能有人說了,老子喜歡男的啊绍豁,這也好辦啊芯咧,你在ProductFactory類里,返回 BoyFriendProduct 就行了(參見注釋掉的代碼),這時你再生產一個朋友看看敬飒,控制臺輸出如下:
product======小鮮肉
好了邪铲,大胸弟,你要的小鮮肉也有了无拗,盡情的去玩耍吧带到。
這時比較常見的方式,你需要女朋友就生產女朋友英染,反之你就生產男朋友揽惹,其實還可以通過泛型來簡化一下代碼,改造后的代碼如下:
//抽象工廠 具體生產什么產品由子類實現(xiàn)
public abstract class Factory {
public abstract <T extends Product> T createProduct(Class<T> clz);
}
具體工廠:
//具體工廠
public class ProductFactory extends Factory {
@Override
public <T extends Product> T createProduct(Class<T> clz) {
Product product = null;
try {
product = (Product) Class.forName(clz.getName()).newInstance();
} catch (Exception e) {
e.printStackTrace();
}
return (T) product;
}
}
此時再看看在代碼中的使用,這時你只需根據你需要的product傳入相應的類就哦了:
mFactory = new ProductFactory();
mProduct = mFactory.createProduct(BoyFriendProduct.class);
mProduct.createProduct();
以上通過泛型和反射簡化了代碼,不過假如我們的工廠只生產一種產品的時候(比如只生產女朋友)税迷,我們還可以再簡化一下代碼永丝,我們可以把factory改為普通的類(非抽象),然后在factory類里直接返回產品并把方法改為靜態(tài)即可箭养,這樣的方式又稱為簡單工廠模式慕嚷。
public static Product createProduct(){
return new GirlFriendProduct();
}
PS:工廠設計模式是一個很好的設計模式,它的缺點是每當工廠添加一個產品時(比如還能生產蒼老師毕泌,哈哈)喝检,我們要新編寫一個相應的產品類,在實際的開發(fā)中撼泛,可以根據實際情況自行選擇吧挠说。
最后,生產女朋友講完了愿题,下一篇會講一下 帶你勾搭妹子的職責連模式损俭,歡迎關注,謝謝潘酗。
本篇項目demo地址杆兵,歡迎start
https://github.com/lxykad/design_mode