設計模式 抽象工廠

2022-09-15 07:36:10 字數 2589 閱讀 3001

抽象工廠模式 (abstract factory)提供乙個建立一系列相關或相互依賴物件的介面,而無需指定它們具體的類

抽象工廠模式是一種類建立型模式可參考設計模式 建立型模式)。

回到頂部

圖-抽象工廠模式結構圖

抽象工廠模式包含以下角色:

abstractproduct: 宣告乙個介面,這個介面中包含產品物件型別。

abstract class abstractproducta 

abstract class abstractproductb 

concreteproduct: 定義乙個產品物件,這個產品物件是由相關的具體工廠建立的。

class concreteproducta1 extends abstractproducta 

}class concreteproducta2 extends abstractproducta 

}class concreteproductb1 extends abstractproductb 

}class concreteproductb2 extends abstractproductb 

}abstractfactory: 宣告乙個介面,這個介面中包含建立抽象產品物件的方法。

abstract class abstractfactory 

concretefactory: 實現建立具體產品物件的方法。

class concretefactory1 extends abstractfactory 

@override

public abstractproductb createproductb() 

}class concretefactory2 extends abstractfactory 

@override

public abstractproductb createproductb() 

}client: 只使用abstractfactoryabstractproduct宣告的介面。

public class abstarctfactorypattern 

}執行結果

concreteproducta1

concreteproductb1

concreteproducta2

concreteproductb2

回到頂部

乙個系統要獨立於它的產品的建立、組合和表示時。

乙個系統要由多個產品系列中的乙個來配置時。

當你要強調一系列相關的產品物件的設計以便進行聯合使用時。

當你提供乙個產品類庫,而只想顯示它們的介面而不是實現時。

回到頂部

(1)抽象工廠模式隔離了具體類的生成,使用者並不需要知道什麼被建立。由於這種隔離,更換乙個具體工廠變得相對容易。所有的具體工廠都實現了抽象工廠中定義的那些公共介面,因此只需要改變具體工廠的例項,就可以在某種程度上改變整個軟體系統的行為。另外,應用抽象工廠模式可以實現高內聚低耦合的設計目的,因此抽象工廠模式得到了廣泛的應用。

(2)當乙個產品族中的多個物件被設計成一起工作時,它能夠保證客戶端始終只使用同乙個產品族中的物件。這對一些需要根據當前環境來決定其行為的軟體系統來說,是一種非常實用的設計模式。 

(3)增加新的具體工廠和產品族很方便,無須修改已有系統,符合「開放封閉原則」

在新增新的產品物件時,難以擴充套件抽象工廠來生產新種類的產品,這是因為在抽象工廠角色中規定了所有可能被建立的產品集合,要支援新種類的產品就意味著要對該介面進行擴充套件,而這將涉及到對抽象工廠角色及其所有子類的修改,顯然會帶來較大的不便。

回到頂部

眾所周知,蘋果和三星這兩家世界級的電子產品廠商都生產手機和電腦。

我們以生產手機和電腦為例,演示一下抽象工廠模式的應用

首先,定義手機和電腦兩個抽象介面,他們都有各自的產品資訊 

inte***ce telephone 

inte***ce computer 

concreteproduct根據abstractproduct來定義具體的產品屬性、方法。

在我們的例子中,蘋果、三星兩家公司的手機和電腦都有各自的具體產品資訊。 

蘋果,三星這兩個廠商都生產手機和電腦。所以它們可以有乙個抽象父類或父介面,提供生產手機和生產電腦的方法。

inte***ce electronicfactory 

蘋果、三星工廠分別實現父介面,生產不同型別的產品。 

測試**

執行結果

蘋果手機,採用ios系統

蘋果電腦,採用mac系統

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

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

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

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

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

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