設計模式 抽象工廠模式

2021-07-25 09:44:58 字數 1336 閱讀 1239

在上面的工廠方法中我們舉例,女媧造人的例子,但是我們想要加上性別,為此重新建模:

human介面中提供get***的方法,我們將blackhuman改為抽象類同時提供實現human介面中的方法,在下方我們提供female與maleblackman的實現類,分別表示男性以及女性黑人。在工廠類的介面中我們依然提供建立人類物件的方法,在具體實現femalefactory與malefactory中提供建立女性工廠以及男性工廠。

在上面的重構中,我們把工廠有具體的進行了劃分,分為男性工廠以及女性工廠,可以比作工廠中的車間,每個車間負責不同的職責。

為建立一組相關或相互依賴的物件提供乙個介面,而且無須指定它們的具體類

抽象工廠模式是工廠模式的公升級版本,在多個業務品種以及業務分類時,採用抽象工廠模式是需要物件的一種非常好的解決方法。

我們可以看到在abstractcreaor中提供建立兩個產品的抽象方法,然後在creator1與creator2中提供具體的實現只生產1類產品與只生產2類產品。

對應上文我們的重構,在humanfactory中我們提供建立各個人種的抽象方法,在底層的實現,提供只產生女性與男性的工廠類。

封裝性——–在高層模組中,不需要關係具體物件的建立方法

產品族內的約束為非公開狀態——–比如我們要求生產乙個女性就生產乙個男性,而這樣的約束封裝在底層中,上層無須知道。

抽象工廠模式的最大缺點就是產品族擴充套件非常困難,比如我們需要新增c類產品,那麼不僅僅需要新增具體實現,而且需要更改具體的介面,違反了開閉原則

在抽象工廠中缺點中我們提到擴充套件產品族比較困難,但是如果我們橫向擴充套件,擴充套件產品的中類,那麼就比較簡單,比如我們在性別中新增雙性人,那麼只需要增加雙性人的實現,然後在工廠中增加雙性人工廠的具體實現即可

因此抽象工廠非常適合橫向擴充套件,而不適合縱向擴充套件。

在抽象工廠模式的通用uml圖中,我們把abstractprodcut2去掉,發現,其實就是工廠模式的細分。因此我們可以認為抽象工廠模式與工廠模式最本質的區別就是可以生成出不同類別的產品。

當我們去咖啡店買咖啡時,我們用工廠模式生產咖啡沒有什麼問題。

但是如果我們不忽略細節,比如我們需要奶、糖等等,那麼我們如果採用工廠模式生產出苦苦的咖啡,如果採用抽象工廠模式,我們不僅僅可以生產出美味的咖啡,同時還可以按照客戶的要求來實現是否需要加糖。

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

建立物件時不會對客戶暴露建立邏輯,並且通過使用乙個共同的介面來指向建立的物件。sept1 建立乙個公共介面,將要對外開放的方法在這裡定義。sept2 建立實現介面的類,用即實現對外開放的類的方法 sept3 建立工廠,提供乙個get方法,這個方法提供返回實現類的物件 建立選擇 sept4 使用,建立...

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

提供乙個建立一系列相關或相互依賴物件的介面,而無需指定它們具體的類。在工廠方法模式中,我們的具體建立者每次使用都只能建立乙個同型別的物件,假如我們現在需要的是多個不同型別的物件,工廠方法就滿足不了需求了。這時我們可以把多個工廠方法組合到乙個類,這就是抽象工廠模式,它就是專門用來建立多個產品,也可以說...

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

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