Java設計模式 抽象工廠模式

2021-08-30 09:01:21 字數 1225 閱讀 9944

前面說到的工廠模式解決了簡單工廠模式建立新的具體產品類要修改工廠類中靜態工廠方法的問題,但是使用工廠模式在建立新的具體產品類的時候需要增加兩個類,這就會造成類的個數成對的增加。當具體產品個數很多時,就會造成系統的複雜度大大加大。

下面來看這個例子:

假如要生產不同品牌的電視機、冰箱、空調,如果按照抽象工廠模式,是不是得要9個具體產品類和9個具體工廠類,類的個數就很多了,如果以後還得增加產品的話,類的個數又得成對的增加。使用抽象工廠模式的話則可以有效的避免這個問題。抽象工廠模式是這樣的:建立多個抽象產品類,如將不同的品牌的電視機放在乙個抽象產品類producttv中,冰箱放在抽象產品類productbridge中,空調放在抽象產品類productaircondition中,然後建立乙個工廠父類,宣告抽象的工廠方法(抽象工廠模式中工廠父類中可能不只有乙個工廠方法,取決於乙個工廠中產品的種類,比如電視機、冰箱、空調,三個種類就會有三個抽象方法),接著就是建立具體工廠類,該情景下需建立三個具體工廠,海爾、海信、tcl工廠,分別生產對應品牌的電視機、冰箱、空調。這就是抽象工廠模式。這樣一算,只需要12個類(減少的是建立的工廠類個數)。大大的減少了類的個數。

下面來看抽象工廠模式的結構:

abstractfactory(抽象工廠):它宣告了一組用於建立一族產品的方法(建立乙個品牌的電視機、冰箱、空調),每乙個方法對應於乙個產品。

concreteproduct(具體工廠):他實現了在抽象工廠中宣告的建立產品的方法,生成一組具體產品。

abstractproduct(抽象產品):它為乙個種別的產品的宣告介面(例如,定義了不同品牌的電視機的生產方法),在抽象產品中宣告了產品所具有的業務方法。

concreteproduct(具體產品):它定義具體工廠生產的具體產品物件,實現抽象產品介面中宣告的業務方法。

結構圖如下:

抽象工廠方法也有缺點:如果想要生產新的品牌格力的電視機、冰箱、空調怎麼辦。只需要在對應的具體產品類中新增格力的電視機、冰箱、空調,然後建立乙個格力工廠來生產即可,可以實現不修改源**的情況下完成需求。但想想,如果想生產海爾的微波爐,那麼就得建立新的抽象產品類微波爐類,還得建立具體的產品類海爾品牌微波爐,最後就得有大動作了,得修改海爾工廠方法了,增加乙個生產微波爐的方法,不符合開放封閉原則。

java設計模式 抽象工廠模式

1.概念 設計模式 一書中對於抽象工廠模式是這樣定義的 提供乙個建立一系列相關或相互依賴物件的介面,而無需指定它們具體的類。產品 plant介面 public inte ce plant 標誌介面 具體產品planta,plantb public class planta implements pl...

JAVA設計模式 抽象工廠模式

目錄 一 什麼是抽象工廠模式 二 模式中包含的角色及其職責 三 抽象工廠模式的優缺點 抽象工廠模式是所有形態的工廠模式中最為抽象和最具一般性的。抽象工廠模式可以向客戶端提供乙個介面,使得客戶端在不必指定產品的具體型別的情況下,能夠建立多個產品族的產品物件。抽象工廠 factory 角色 抽象工廠模式...

Java設計模式 抽象工廠模式

抽象工廠模式可以向客戶端提供乙個介面,使得客戶端在不必指定產品具體型別的情況下,建立多個產品族中的產品物件。這就是抽象工廠模式的用意。每個模式都是針對一定問題的解決方案。抽象工廠模式面對的問題是多產品等級結構的系統設計。在學習抽象工廠具體例項之前,應該明白兩個重要的概念 產品族和產品等級。產品族 是...