抽象工場模式

2021-09-08 13:26:27 字數 3124 閱讀 1862

在工廠方法模式中,我們使用乙個工廠建立乙個產品,也就是說乙個具體的工廠對應乙個具體的產品。但是有時候我們需要乙個工廠能夠提供多個產品物件,而不是單一的物件,這個時候我們就需要使用抽象工廠模式。

抽象工廠模式是所有形態的工廠模式中最為抽象和最具一般性的,抽象工廠迷失可以向客戶端提供乙個介面,使得客戶端在不必指定產品的具體型別的情況下,能夠建立多個產品族的產品物件。

在講解抽象工廠模式之前,我們需要釐清兩個概念:

產品等級結構。產品的等級結構也就是產品的繼承結構。例如乙個為空調的抽象類,它有海爾空調、格力空調、美的空調等一系列的子類,那麼這個抽象類空調和他的子類就構成了乙個產品等級結構。

產品族。產品族是在抽象工廠模式中的。在抽象工廠模式中,產品族是指由同乙個工廠生產的,位於不同產品等級結構中的一組產品。比如,海爾工廠生產海爾空調。海爾冰箱,那麼海爾空調則位於空調產品族中。

產品等級結構和產品族結構示意圖如下:

uml結構圖

模式結構說明:

abstractfactory:抽象工廠。抽象工廠定義了乙個介面,所有的具體工廠都必須實現此介面,這個介面包含了一組方法用來生產產品。

concretefactory:具體工廠。具體工廠是用於生產不同產品族。要建立乙個產品,客戶只需要使用其中乙個工廠完全不需要例項化任何產品物件。

abstractproduct:抽象產品。這是乙個產品家族,每乙個具體工廠都能夠生產一整組產品。

product:具體產品。

還是用之前的水果的例子

現在有兩個產品族: 南方水果, 北方水果

產品結構 :蘋果、香蕉

public inte***ce fruit
public abstract void eat();

}

public abstract class banana implements fruit
@override

public void eat() }

@override

public void eat()

}

public class northbanana extends banana 

}

public class southbanana extends banana 

}

水果分為蘋果和香蕉  蘋果分為南方蘋果、北方蘋果 香蕉分為南方香蕉、北方香蕉

那我們使用抽象工廠模式是如何實現的呢:

public inte***ce fruitfactory
南方水果工廠獲得南方蘋果和南方香蕉的例項

public class northfruitfactory implements fruitfactory 

public fruit getbanna()

}

北方水果工廠獲得北方蘋果和北方香蕉的例項

public class southfruitfactory implements fruitfactory 

public fruit getbanna()

}

public static void main(string args)
執行結果:

吃南方的蘋果

吃南方的香蕉

吃北方的蘋果

吃北方的香蕉

此時又新加了乙個產品族 溫室水果

@override

public void eat()

}

public class greenhousebanana extends banana

}

public class greenhousefruitfactory implements fruitfactory 

@override

public fruit getbanna()

}

public static void main(string args)
執行結果:

吃南方的蘋果

吃南方的香蕉

吃北方的蘋果

吃北方的香蕉

吃溫室蘋果

吃溫室香蕉

優點

1、 抽象工廠隔離了具體類的生成,是的客戶端不需要知道什麼被建立。所有的具體工廠都實現了抽象工廠中定義的公共介面,因此只需要改變具體工廠的例項,就可以在某種程度上改變整個軟體系統的行為。

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

缺點

新增新的行為時比較麻煩。如果需要新增乙個新產品族物件時,需要更改介面及其下所有子類,這必然會帶來很大的麻煩。

模式使用場景

乙個系統不應當依賴於產品類例項如何被建立、組合和表達的細節,這對於所有型別的工廠模式都是重要的。

2.系統中有多於乙個的產品族,而每次只使用其中某一產品族。

屬於同乙個產品族的產品將在一起使用,這一約束必須在系統的設計中體現出來。

系統提供乙個產品類的庫,所有的產品以同樣的介面出現,從而使客戶端不依賴於具體實現。

總結

抽象工廠模式中主要的優點在於具體類的隔離,是的客戶端不需要知道什麼被建立了。其缺點在於增加新的等級產品結構比較複雜,需要修改介面及其所有子類。

抽象工廠中方法對應產品結構,具體工廠對應產品族

IOS設計模式之工場模式

在基類中定義建立物件的乙個介面,讓子類決定實列化那個類.工廠方法讓乙個類的實列化延遲到子類進行.工廠方法解決的問題是 物件的建立時機,它提供了一種擴充套件的策略,很好的符合了開放封閉原則.將工廠和產品都抽象出乙個基類,在基類中定義統一的介面,然後再具體的工廠同建立具體的產品.與直接建立新的具體物件相...

android設計模式 簡單工場模式

例1 思路 蘋果類,包含獲取蘋果的方法。香蕉類,包含獲取香蕉的方法。主類 建立蘋果例項,香蕉例項,分別呼叫獲取方法。改進1 有共同方法 抽象出乙個水果介面 改進2 建立出乙個水果工廠,完成獲取蘋果,獲取香蕉的行為。優勢 主類只需要建立乙個工廠類即可。改進3 將水果工廠中的獲取方法設定成靜態。優勢 呼...

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

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