簡單原廠模式:
當需要一個相同的介面,但裡面完成內容不同時,就可以用一個工廠來產生其中的多個類的一個執行個體。 通俗說 :
用來生產同一等級結構中的任意產品(不支援增加新產品)
在於簡單工廠類中包含了必要的邏輯判斷,根據用戶端的選擇條件動態執行個體化相關的類,對於用戶端來說,去除了與具體產品的依賴。
缺點:當需要增加新產品時,需要修改工廠類,不符合開放封閉原則。
=====================================================
Factory 方法模式:
定義一個用於建立對象的介面,讓子類決定執行個體化哪一個類。工廠方發使用一個類的執行個體化延遲到其子類。
用來生產同一等級結構中的固定產品(支援增加任意產品)
步驟:
1 一個工廠建立一個產品,所有的具體工廠繼承自一個抽象工廠。
2 用戶端先建立不同產品工廠,再由工廠建立具體產品,
3 產品的建立邏輯分散在每個具體工廠中。用戶端只依賴於抽象工廠與抽象產品,不依賴於具體的工廠與具體產品增。加新產品是需要增加工廠類和產品類,符合OCP原則。
原廠模式中,重要的是工廠類,不是產品類。產品類可以是多種形式的。
++++++++++++++++++++
Factory 方法與簡單工廠對比
1 Factory 方法 除將產品抽象出一個介面以便實現多態,還將不同的工廠進行細分,統一繼承自一個介面,將簡單工廠中的判斷移至用戶端。實現了開-閉原則。
2 用戶端若使用一個工廠對象生產多個產品,而簡單工廠需要修改每個生產函數的參數,Factory 方法模式只需修改初始化語句。
==============================================
抽象工廠
提供一個建立一系列相關或相互依賴對象的介面,而無需制定他們具體的類
用來生產不同產品族的全部產品,易於交換產品系列。(對於增加新產品,無能為力,支援增加產品族)。
一個產品族是不同系列的產品組合,產品的建立的邏輯分在每個具體的工廠中。所有的具體工廠繼承自同一個抽象工廠。用戶端建立不同產品族的工廠,產品族的工廠建立具體的產品,但對用戶端是不可見的。怎講愛新產品族時,需要增加具體工廠類。符合OCP原則,增加新產品時,需要修改具體工廠類和增加產品類。符合OCP原則。
=============================
小結
按照順序,是抽象程度依次加深。簡單原廠模式最易理解。當需要一個相同的介面,但裡面完成內容不同的時候,就可以用一個工廠來產生其中多個類的一個執行個體。它最明顯的是有一個工廠類來產生介面執行個體。
Factory 方法模式是簡單工廠的抽象加深,它不需要一個獨立來建立對象。而是通過子類延遲建立需要的對象。如在汽車的對象裡麵包括了發動機對象,但發動機對象不是由特定的工廠類來產生,而是取決於到底是什麼樣的汽車,不同的汽車有不同的發動機對象,這就是交給了子類來完成。
而抽象工廠則有點類似 簡單原廠模式 + Factory 方法模式。 它的好處是通過抽象類別來隔離具體類,並通過唯一入口來決定產生什麼具體類。我們使用它的前提條件是一系列相似的類