工廠方法模式
工廠方法模式是我們開發中使用最廣泛的設計模式之一,不說無聊的定義,直接看例子
一、工廠方法模式的四大模組:
1、抽象工廠 --- 一個抽象類,有一個生產產品(女朋友)的抽象方法,由具體工廠實現。
2、具體工廠 --- 繼承抽象工廠類,生產何種產品(你是要國產還是要日韓還是要歐美由你定)的具體實現。
3、抽象產品 --- 一個抽象類,提供一個抽象方法,由具體產品實現。
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======小鮮肉複製程式碼
好了,大胸弟,你要的小鮮肉也有了,盡情的去玩耍吧。
這時比較常見的方式,你需要女朋友就生產女朋友,反之你就生產男朋友,其實還可以通過泛型來簡化一下程式碼,改造後的程式碼如下:
//抽象工廠 具體生產什麼產品由子類實現
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類裡直接返回產品並把方法改為靜態即可,這樣的方式又稱為簡單工廠模式。
public static Product createProduct(){
return new GirlFriendProduct();
}複製程式碼
PS:工廠設計模式是一個很好的設計模式,它的缺點是每當工廠新增一個產品時(比如還能生產蒼老師,哈哈),我們要新編寫一個相應的產品類,在實際的開發中,可以根據實際情況自行選擇吧。
最後,生產女朋友講完了,下一篇會講一下 帶你勾搭妹子的職責連模式,歡迎關注,謝謝。
本篇專案demo地址,歡迎start
https://github.com/lxykad/design_mode複製程式碼