head-first-design-patterns-master\src\headfirst\designpatterns\factory
案例:新建披薩類
將變化的地方進行封裝。
簡單工廠不是乙個「真正的」模式,更像是一種程式設計習慣。
所有工廠模式都用來封裝物件的建立。工廠方法模式通過讓子類決定該建立的物件是什麼,來達到將物件建立的過程封裝的目的。
工廠方法模式定義:定義了乙個建立物件的介面,但由子類決定要例項化的類是哪乙個。工廠方法讓類把例項化推遲到子類
依賴倒置原則:要依賴抽象,不要依賴具體類
抽象工廠定義了乙個介面,所有的具體工廠都必須實現此介面,這個介面包含一組方法用來生產產品。
具體工廠實現不同的產品家族。要建立乙個產品,客戶只需要使用其中的乙個工廠而完全不需要例項化任何產品物件。
客戶的**中只需要涉及抽象工廠,執行時將自動使用實際的工廠。
定義的pizza抽象類,具體的pizza種類繼承pizza抽象類並具體實現抽象方法prepare方法,繼承來pizza抽象類中的具體方法。
定義的pizzastore抽象類,具體的pizzastore種類繼承抽象類並具體實現抽象方法createpizza方法,在createpizza方法中new 獨特的pizza(匯入pizza原料工廠這個引數)。
定義pizzaingredientfactory介面,此介面是用來生產原料。各地方的獨特風味的披薩工廠實現此介面,為獨特pizza(繼承了pizza的具體類)的具體實現類提供原料。
工廠方法和抽象工廠:
區別:工廠方法使用的是類,使用繼承,利用工廠方法建立物件,需要擴充套件乙個類,並覆蓋他的工廠方法,工廠方法通過子類來建立物件,客戶只需要知道他們所使用的抽象型別就可以了,而由子類來負責決定具體型別,
抽象工廠使用的是物件,使用的是組合,提供乙個用來建立乙個產品家族的抽象型別,這個型別的子類定義了產品被產生的方法。先例項化這個工廠,傳入一些針對抽閒型別所寫的**。把一些相關的產品集合起來。如果加入新產品就必須改變介面 。抽象工廠使用工廠方法實現具體工廠
相同點抽象工廠和工廠方法都是為了建立物件。
可以參考一下這篇部落格:
工廠模式(工廠模式4)
工廠模式 工廠模式 相對於簡單工廠模式,我們要再建乙個工廠介面,對於其他要實現的的類都實現這個介面,建立乙個實現類的工廠 public class audica ctory implements ca ctory 通過這個實現類工廠來建立我們要的實現類 新增工廠實現類,方便新增新的類,如果要建立乙個...
4 工廠模式
當使用 new 時,是在例項化乙個具體類,用的是實現不是介面。爭對介面程式設計,可以隔離掉以後系統可能發生的一大堆改變。工廠 factory 處理建立物件的細節。並將這樣的行為封裝在子類中。通過讓子類決定該建立的物件是什麼,來達到物件建立的過程封裝的目的 工廠方法讓類把例項化推遲到子類。靜態方法 不...
4 工廠模式
舉例 製作不同口味的披薩 榴蓮 火腿兩種口味 不同口味的披薩製作的過程是不一樣的。product 抽象產品的生產過程 pizza類 concreteproduct 繼承product,實現了製作過程 hampizza durianpizza factory 返回客戶購買的披薩 定義披薩建立過程 pu...