抽象工廠模式 常用設計模式 抽象工廠模式

2021-10-12 07:43:53 字數 1614 閱讀 3392

提供乙個建立一系列相關或相互依賴物件的介面,而無需指定它們具體的類。

在工廠方法模式中,我們的具體建立者每次使用都只能建立乙個同型別的物件,假如我們現在需要的是多個不同型別的物件,工廠方法就滿足不了需求了。這時我們可以把多個工廠方法組合到乙個類,這就是抽象工廠模式,它就是專門用來建立多個產品,也可以說是建立產品家族的。

允許客戶使用抽象的介面建立一組相關產品,而不需要知道(或者關心)產出的具體產品是什麼,這樣客戶就可以從具體的產品中解耦出來。

乙個具體工廠可以建立多個產品,與工廠方法模式相比,可以少產生具體工廠的類數量。

易於交換產品系列,只要更換具體工廠,就可以改變這個產品系列。

抽象工廠是使用組合的方式把工廠方法集合到乙個類中,當新增乙個產品家族成員時就要修改抽象工廠類及其下面的具體工廠類,所以它的擴充套件性比較差。

每新增乙個產品子類都要建立乙個類,當產品子類過多時會產生很多類,導致系統複雜性加大。

當需要建立產品家族,或者需要想讓建立的產品集合起來時使用。

當系列產品不固定,在以後可能會增加整個系列產品時使用。

**說明:

抽象工廠類包含所有產品建立的抽象方法。

abstract class abstractfactory
具體的工廠實現特定產品物件。通常在執行時建立concretefactory類的例項。因此,客戶端可以通過使用不同的具體工廠實現建立不同的產品物件。

class concretefactory1 : abstractfactory    public override abstractproductb createproductb()    }class concretefactory2 : abstractfactory    public override abstractproductb createproductb()    }
抽象產品類

//abstract class abstractproducta{}abstract class abstractproductb
具體產品實現類,繼承抽象產品類,實現具體產品的方法

class producta1 : abstractproducta{}class productb1 : abstractproductb}class producta2 : abstractproducta{}class productb2 : abstractproductb}
客戶端類

class client    public void run()    }
客戶端呼叫

abstractfactory factory1 = new concretefactory1();client c1 = new client(factory1);c1.run();abstractfactory factory2 = new concretefactory2();client c2 = new client(factory2);c2.run();console.read();

設計模式之工廠模式(簡單工廠 工廠模式 抽象工廠)

參考博文 侵權必刪 什麼是工廠模式 通過 物件建立 模式繞開new,來避免物件建立 new 過程中所導致的緊耦合 依賴具體類 適用性 使用new建立物件且導致緊耦合的場景。思考 物件導向程式設計要以動態的思維去看待 換句話說,在看 時需要時間概念,發現 在未來的穩定之處和變化之處。一般介面和抽象類是...

抽象工廠模式 設計模式(九) 抽象工廠模式

提供乙個為建立一組相關或相互依賴物件的介面,且無須指定它們的具體類。它屬於建立型模式。在抽象工廠模式中,每個具體工廠都提供了多個用於建立多種不同型別具體物件的方法,這些不同型別的物件都存在乙個共同的屬性,構成乙個族。上篇文章設計模式 八 工廠方法模式說到工廠方法模式中只考慮某一類產品的生產,例如可樂...

抽象工廠模式 抽象工廠模式

抽象工廠模式其實是圍繞了乙個超級工廠建立其他的工廠 可參考工廠模式 這個超級工廠又可以想像成是其他工廠的工廠,這種設計模式是一種建立型模式。在抽象工廠模式中,介面是負責建立乙個相關物件的工廠,不需要顯式指出其類。每個生成的工廠都能按照工廠模式提供物件。意圖提供乙個建立一系列相關或相互依賴物件的介面,...