定義乙個建立物件的介面,由子類決定要例項化的類。工廠方法將類例項推遲到子類。依賴倒置。
第一種方式是:
下面是其建模過程。class pizzastore
public pizza orderpizza(string type)
} class pizzafactory
pizza pizza = null;//將pizza這個例項提取出來,有利於後面的拓展
public pizza createpizza(string type)
else if (type.equals("greek"))
else if (type.equals("pepperoni"))
return pizza;}}
在第乙個過程中,pizzafactory
依賴於pizza,
這個時候,當你需要
cheesepizza
時,我們看看流程,
pizzastore
中存有pizzafactory
的例項,通過
pizzafactory
建立pizza
,所有的
pizza
繼承於pizza
基類,因此你可以任意的建立
pizza。
但是這種方式存在的不足是?
如果新增一種新的型別,就必須到工廠中修改**。
由此,我們有下面改進方式
abstract class pizzastroe2
public pizza orderpizza(string type)
return pizza;
}public abstract pizza createpizza(string type);//將建立pizza的方法放入pizzastore中,可以為不同的地區建立不同的子類。
//使用抽象用以繼承,在呼叫的時候使用多型
主要的改進是丟棄掉了工廠,工廠主要的職責是建立pizza
,提取出來之後,任意型別的
pizza
建立屬於自己的
pizza
,此時在
store
中的建立為虛函式。個人想法是如果對
factory
進行繼承,拓展能夠實現類似的功能。
看上去我們的**已經能夠實現對修改關閉,對拓展開放的原則,但是我們在建立的時候依舊存在著原料的制約。此時引入乙個pizzaingredientfactory。
再次看看我們新的建模方式,對於不同的地區有不同的建立方式,此時已經不限於原材料的產地。通過抽象工廠提供的介面,可以建立產品的家族。
4、執行結果:
head first設計模式 工廠模式
這裡描述的設計模式,於head first系列,這裡的工廠模式是基於書中披薩店的例子。簡單工廠的設計就是說把所有需要建立的東西放在乙個普通的函式中,以書中披薩的例子來講,假設有一百種披薩,就再函式中全部處理完。當然簡單工廠內部的實現也可以有技巧,常見的就是if或者switch逐個處理,但是如果太多了...
Head First設計模式四 工廠模式
除了使用new操作符之外,還有更多製造物件的方法,比如使用工廠模式封裝例項化的行為。工廠模式在輔助面向介面程式設計時很有作用,它用來封裝物件的建立。本章從簡單工廠開始講起,並逐步深入了解工廠方法 factory method 和抽象工廠模式 abstract factory 從嚴格意義上來說簡單工廠...
Head First設計模式之工廠模式
定義了乙個建立物件的介面,但由子類決定要例項化的類是哪乙個.工廠方法讓類把例項化推遲到子類 1 抽象工廠角色 這是工廠方法模式的核心,它與應用程式無關。是具體工廠角色必須實現的介面或者必須繼承的父類。2 具體工廠角色 它含有和具體業務邏輯有關的 由應用程式呼叫以建立對應的具體產品的物件。3 抽象產品...