簡單工廠模式由於不易擴充套件,違背閉包原則,為了解決這個問題,就產生了工廠方法模式,建立乙個工廠介面和建立多個工廠實現類,這樣一旦需要加入新的功能,只需要加入工廠實現類就可以了。
工廠方法模式也叫做虛擬構造器模式或者多型工廠模式,工廠父類定義所有產品物件的公共介面,通過工廠子類來負責產生具體哪個產品物件,將產品例項化操作延遲到工廠子類中完成。
抽象產品角色(product):定義產品的介面
具體產品角色(concreteproduct):具體產品類
抽象工廠角色(creator):宣告工廠方法(factorymethod),返回乙個產品
真實的工廠(concretecreator):實現factorymethod工廠方法,由客戶呼叫,返回乙個產品的例項(客戶呼叫的是這個!)
1.不知道所需要的類:
客戶端不知道具體產品的類名,只需要知道所對應的工廠就可以了,客戶端需要知道建立具體產品的工廠類,通過工廠類來建立具體的物件。
2.乙個類通過其子類來指定建立那個物件
優點:
1.客戶呼叫工廠子類來建立具體的產品,客戶無需關心產品物件的具體建立細節,只需要關心對應的工廠即可。
2.工廠角色和產品角色的多型性設計,使得父工廠可以自主決定建立那個產品物件,具體的建立過程是在工廠子類中完成。
3.當需要加入新產品時無需修改抽象工廠和抽象產品提供的介面,無需修改客戶端,也無需修改具體的工廠和具體的產品,只需要新增乙個具體工廠和具體產品就可以了。
系統的可擴充套件性變得非常好,完全符合開閉原則。
缺點:
1.在新增新的產品的時候,需要加入成對的具體產品類和具體工廠類,提公升了系統的複雜性,更多的類需要編譯執行,給系統帶來了額外的開銷。
2.由於考慮了系統的可擴充套件性,引入了抽象層,增加了系統的抽象性和理解難度,實現時可能還需要dom,和反射等技術,增加了系統的實現難度。
也就是改寫之前簡單工廠模式的**即可。
void getsize();
}@override
public void getsize()
}呼叫具體的子工廠例項返回即可。
工廠方法模式又稱為工廠模式,它屬於類建立型模式
工廠方法模式包含四個角色
工廠方法模式的主要優點是增加新的產品類時無須修改現有系統,並封裝了產品物件的建立細節,系統具有良好的靈活性和可擴充套件性;
其缺點在於增加新產品的同時需要增加新的工廠,導致系統類的個數成對增加,在一定程度上增加了系統的複雜性。
工廠方法模式 工廠方法模式
工廠方法模式是簡單工廠模式的公升級版,簡單工廠模式不符合設計模式的原則 即 單一職責,開閉原則 優點 職責明確,擴充套件方便 缺點 需要建立多個工廠 實現步驟 1.將工廠通用方法抽取介面 例如 ifactory 2.將產品抽取介面 例如 icar 3.實現各種產品 例如 baomacar,benti...
工廠方法模式 工廠方法模式 二
工廠方法模式是對簡單工廠的進一步抽象和封裝,需要新的類物件時不需要對既有工廠類進行修改,而是增加新的工廠類。工程類可以使用模版進一步封裝,由編譯器來生成 從而減少 編寫工作量。工廠方法的 c 實現01part產品抽象基類class animal virtual void show 0 02part產...
工廠方法模式(一) 簡單工廠方法模式
ps 第二篇學習部落格,堅持就是勝利。繼續設計模式的學習,記錄工廠模式,加深自己的理解。基本結構 abstractproduct 用來定義基本的商品的抽象 public abstract class abstractphoneproduct 用來實現抽象商品,生成各種商品 public class ...