抽象工廠模式提供乙個建立一系列相關或相互依賴物件的介面,而無須指定它們具體的類,它是一種物件建立型模式。
abstractfactory (抽象工廠角色):宣告了一組用於建立一族產品的方法,每乙個方法對應一種產品。
concretefactory (具體工廠角色):實現了在抽象工廠中宣告的建立產品的方法,生成一組具體產品,這些產品構成了乙個產品族。
abstractproduct (抽象產品角色):為每種產品宣告介面,在抽象產品中宣告了所有的業務方法。
concreteproduct (具體產品角色):定義具體工廠生產的具體產品物件,實現在抽象產品介面中宣告的業務方法。
隔離了具體類的生成,使得客戶並不需要知道什麼被建立。因為這種隔離,因此更換乙個具體工廠就變得相對容易。
當乙個產品族中的多個物件被設計稱一起工作時,它能夠保證客戶端始終只使用同乙個產品族中的物件。
增加新的產品族很方便,無需修改已有系統,符合開閉原則。
增加新的產品等級結構很麻煩,因為需要對原有系統進行較大的修改,甚至需要修改抽象層**,這必然會帶來較大的不便。
在這個角度,它違背了開閉(對擴充套件開放,對修改封閉)原則。
使用者無須關心物件的建立過程,需要將物件的建立和使用解耦
系統中有多餘乙個的產品族,而每次都只使用其中的某一種產品族。
產品等級結構穩定!設計完成之後,不會向系統中增加新的產品等級結構或刪除已有產品等級結構。
1、首先需要區分兩個概念:產品族、產品等級(叫什麼名字不重要)
產品族:本質上完全不同的產品的組合,比如盒子與蘋果,本質上完全不同,但是它們可以屬於乙個產品族,組成盒裝蘋果
產品等級:本質上相同但是特性上面有差異的產品,如紅盒子和藍盒子,本質上都是盒子,只是顏色不同
(這兩個概念的大小用使用者自己控制,你可以說蘋果香蕉本質上不同,但是也可以說在水果的條件下,它們都屬於水果)
2、區分這兩個概念就能弄懂工廠方法模式和抽象工廠模式有什麼區別了。
因為工廠方法模式針對的是乙個產品等級結構;
而抽象工廠模式需要面對多個產品等級結構,乙個工廠等級結構可以負責多個不同產品等級中的產品物件的建立。
簡單的說抽象工廠模式面向多個產品族開發,而工廠方法模式面向單個產品等級開發。
3、從廣義上來看,我們可以說工廠方法模式隱藏在抽象工廠模式其中。
4、當我們面向的是產品族的開發,需要用同一等級的不同產品合成乙個族來獲得最終需要的東西時,就可以使用抽象工廠模式。
抽象工廠模式對於產品族非常友好,比如今天要新增一套所有都帶有紅色的產品,那麼就相當於與只要建立乙個紅色產品族即可。
但是對產品等級不友好,也就是一旦你有一天需要增加單一乙個花的盒子,但是不需要增加花的蘋果,那麼修改就會比較可怕了。
參考部落格:
大戰設計模式 6 抽象工廠模式
設計模式使用的例子 抽象工廠模式提供乙個建立一系列相關或相互依賴物件的介面,而無須指定它們具體的類,它是一種物件建立型模式。abstractfactory 抽象工廠角色 宣告了一組用於建立一族產品的方法,每乙個方法對應一種產品。concretefactory 具體工廠角色 實現了在抽象工廠中宣告的建...
設計模式 工廠模式 抽象工廠模式
建立物件時不會對客戶暴露建立邏輯,並且通過使用乙個共同的介面來指向建立的物件。sept1 建立乙個公共介面,將要對外開放的方法在這裡定義。sept2 建立實現介面的類,用即實現對外開放的類的方法 sept3 建立工廠,提供乙個get方法,這個方法提供返回實現類的物件 建立選擇 sept4 使用,建立...
抽象工廠模式 常用設計模式 抽象工廠模式
提供乙個建立一系列相關或相互依賴物件的介面,而無需指定它們具體的類。在工廠方法模式中,我們的具體建立者每次使用都只能建立乙個同型別的物件,假如我們現在需要的是多個不同型別的物件,工廠方法就滿足不了需求了。這時我們可以把多個工廠方法組合到乙個類,這就是抽象工廠模式,它就是專門用來建立多個產品,也可以說...