首先,還是引入乙個場景:一家披薩店,有許多的披薩種類(cheezepizza, clampizza),在新建乙個披薩的時候,很可能會這樣做:
public class ******pizzafactory else if(clam_pizza.equals(type)) else if(pepperoni_pizza.equals(type)) else if(veggie_pizza.equals(type)) return null; } }
這就是乙個簡單工廠,使用這個簡單工廠的類**如下:
public class pizzastore }類圖如下:
當這家披薩店越做越大,它需要做不用風味的披薩:紐約風味的cheezepizza,芝加哥風味的cheezepizza,紐約風味的clampizza等等,每種pizza都可能有兩種風味。甚至可能之後還會加入california,texas風味的等等。
這時候,簡單工廠顯然不能滿足對擴充套件開放的要求。我們可以這樣設計:
抽象的pizzastore中的createpizza方法交給子類去實現,抽象的pizzastore只知道抽象的pizza,其他一概不知。當需要擴充套件另外乙個風味的pizzastore的時候,只需要從pizzastore繼承,並實現createpizza方法即可。
具體工廠的**:public class chicagopizzastore extends pizzastore else if(clam_pizza.equals(type)) else if(pepperoni_pizza.equals(type)) else if(veggie_pizza.equals(type)) return null; } }pizzastore的**:public abstract class pizzastore public abstract pizza createpizza(string type); }
工廠方法模式的類圖:
設計原則:要依賴抽象,不要依賴具體
如果不依賴抽象,pizzastore很可能是這樣的:
(to be continued)
簡單工廠模式,工廠模式,抽象工廠模式
三種模式看了一天,記錄下自己的理解 headfirst,比薩店為例 1,簡單工廠模式 乙個具體的工廠類 pizzafactory 乙個抽象的產品類pizza,可以派生出多個具體的產品類 客戶 pizzastore類 工廠類 pizzafactory類關聯產品類pizza,工廠生產出不同型別的pizz...
簡單工廠模式 工廠模式 抽象工廠模式
簡單工廠模式 簡單工廠模式的最大優點在於工廠類中包含了必要的邏輯判斷,根據客戶端的選擇條件動態例項化相關類,對於客戶端來說,去除了與具體產品的依賴。但增加功能時,需增加 case 邏輯判斷分支條件,修改了原有的類,我們不但對擴充套件開發了,對修改也開放了,違背了開放 封閉原則。工廠方法模式,定義了乙...
簡單工廠模式 工廠模式 抽象工廠模式
其實這個三個c 的設計模式已經學習很長時間了,今晚才想起來要寫這三個設計模式,為什麼要用c 中的設計模式呢?for example,你已經會開車了,正著開,倒著開,轉彎,這些都是開車基本的,但是你並沒有很高的車技,並不會炫酷。漂移,就好像c 中的設計模式一樣,在你學好c 的基礎上,嫻熟的應用出的新技...