六個建立模式 抽象工廠模式

2021-09-25 18:55:47 字數 1537 閱讀 8076

抽象工廠模式為建立一組物件提供了一種解決方案。與工廠方法模式相比,抽象工廠模式中的具體工廠不只是建立一種產品,它負責建立一族產品。

抽象工廠模式定義如下:抽象工廠模式(abstract factory pattern):提供乙個建立一系列相關或相互依賴物件的介面,而

無須指定它們具體的類。抽象工廠模式又稱為kit模式,它是一種物件建立型模式。

在抽象工廠模式中,每乙個具體工廠都提供了多個工廠方法用於產生多種不同型別的產品,這些產品構成了乙個產品族,抽象工廠模式結構如圖

示例**

在抽象工廠中宣告了多個工廠方法,用於建立不同型別的產品,抽象工廠可以是介面,也可以是抽象類或者具體類,其典型**如下所示:

abstract class abstractfactory

具體工廠實現了抽象工廠,每乙個具體的工廠方法可以返回乙個特定的產品物件,而同乙個具體工廠所建立的產品物件構成了乙個產品族。對於每乙個具體工廠類,其典型**如下所示:

class concretefactory1 extends abstractfactory

//工廠方法二

public abstractproductb createproductb()

……}

主要優點

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

(2) 當乙個產品族中的多個物件被設計成一起工作時,它能夠保證客戶端始終只使用同乙個產品族中的物件。

(3) 增加新的產品族很方便,無須修改已有系統,符合「開閉原則」。

主要缺點

增加新的產品等級結構麻煩,需要對原有系統進行較大的修改,甚至需要修改抽象層**,這顯然會帶來較大的不便,違背了「開閉原則」。

適用場景:

在以下情況下可以考慮使用抽象工廠模式:

(1) 乙個系統不應當依賴於產品類例項如何被建立、組合和表達的細節,這對於所有型別的工廠模式都是很重要的,使用者無須關心物件的建立過程,將物件的建立和使用解耦。

(2) 系統中有多於乙個的產品族,而每次只使用其中某一產品族。可以通過配置檔案等方式來使得使用者可以動態改變產品族,也可以很方便地增加新的產品族。

(3) 屬於同乙個產品族的產品將在一起使用,這一約束必須在系統的設計中體現出來。同乙個產品族中的產品可以是沒有任何關係的物件,但是它們都具有一些共同的約束,如同一作業系統下的按鈕和文字框,按鈕與文字框之間沒有直接關係,但它們都是屬於某一作業系統的,此時具有乙個共同的約束條件:作業系統的型別。

(4) 產品等級結構穩定,設計完成之後,不會向系統中增加新的產品等級結構或者刪除已有的產品等級結構。

建立模式 抽象工廠模式

一 抽象工廠模式說明 抽象工廠模式更符合我們的日常生活和一般規律,所以,應用更加廣泛。下圖舉例說明了抽象工廠模式 抽象工廠模式設計 根據上圖的描述,抽象工廠模式可以設計如下 packagecom.solid.abstractfactory 抽象工廠模式 產品介面一 author solid publ...

「物件建立」模式 抽象工廠

動機 在軟體系統中,經常面臨著 一系列相互依賴的物件 的建立工作,同時由於需求的變化,往往存在更多系列物件的建立物件 如何應對這種變化,如何繞過常規的物件建立方法 new 提供一種 封裝機制 來避免客戶程式和這種 多系列具體物件建立工作 的緊耦合 模式定義 提供乙個介面,讓該介面負責建立一系列 相關...

設計模式 六個建立型模式

定義乙個工廠類,它可以根據引數的不同返回不同類的例項,被建立的例項通常都具有共同的父類。定義乙個用於建立物件的介面,讓子類決定例項化哪乙個類。工廠方法使乙個類的例項化延遲到其子類。提供乙個建立一系列相關或相互依賴物件的介面,而無需指定他們具體的類。保證乙個類僅有乙個例項,並提供乙個訪問它的全域性訪問...