抽象工廠(abstractfactory)模式的定義:是一種為訪問類提供乙個建立一組相關或相互依賴物件的介面,且訪問類無須指定所要產品的具體類就能得到同族的不同等級的產品的模式結構。
抽象工廠模式是工廠方法模式的公升級版本,工廠方法模式只生產乙個等級的產品,而抽象工廠模式可生產多個等級的產品。
產品族:同類產品屬於可以被稱為同級產品,而不同型別的產品組合起來的可以被稱為產品族,這些產品分屬不同的產品等級結構中。
使用抽象工廠模式一般要滿足以下條件:
抽象工廠模式除了具有工廠方法模式的優點外,其他主要優點如下:
其缺點是:當產品族中需要增加乙個新的產品時,所有的工廠類都需要進行修改。增加了系統的抽象性和理解難度。
抽象工廠模式同工廠方法模式一樣,也是由抽象工廠、具體工廠、抽象產品和具體產品等 4 個要素構成,但抽象工廠中方法個數不同,抽象產品的個數也不同。現在我們來分析其基本結構和實現方法。
1. 模式的結構
抽象工廠模式的主要角色如下:
抽象工廠模式的結構圖如下所示:
2. 模式的實現
從類圖可以看出抽象工廠模式的結構同工廠方法模式的結構相似,不同的是其產品的種類不止乙個,所以建立產品的方法也不止乙個。下面給出抽象工廠和具體工廠的**。
(1) 抽象工廠:提供了產品的生成方法。
inte***ce
abstractfactory
(2) 具體工廠:實現了產品的生成方法。
class
concretefactory1
implements
abstractfactory
public product2 newproduct2()
}
開-閉原則要求乙個軟體系統可以在不修改原有**的情況下,通過擴充套件達到增強其功能的目的。對於乙個涉及到多個產品等級結構和多個產品族的系統,其功能的增強不外乎兩個方面:
增加新的產品族
在產品等級結構的數目不變的情況下,增加新的產品族,就意味著在每乙個產品等級結構中增加乙個(或者多個)新的具體(或者抽象和具體)產品角色。
由於工廠等級結構是與產品等級結構平行的機構,因此,當產品等級結構有所調整時,需要將工廠等級結構做響應的調整。現在產品等級結構**現了新的元素,因此需要向工廠等級結構中加入相應的新元素就可以了。
也就是說,只需要向系統中加入新的具體工廠類就可以了,沒有必要修改已有的工廠角色或者產品角色。因此,在系統中的產品族增加時,抽象工廠模式是支援開-閉原則的。
增加新的產品等級結構
在產品族的數目不變的情況下,增加新的產品等級結構,也就是說,所有的產品等級結構中的產品數目不會改變,但是現在多出乙個與現有的產品等級結構平行的新的產品等級結構。
要做到這一點,就需要修改所有的工廠角色,給每乙個工廠類都增加乙個新的工廠方法,而這顯然違背了開閉原則。
總結:抽象工廠模式以一種傾斜的方式支援增加新的產品,它為新產品族的增加提供方便,而不能為新的產品等級結構的增加提供這樣的方便。
建立型模式 工廠模式and抽象工廠模式
意圖 定義乙個建立物件的介面,讓其子類自己決定例項化哪乙個工廠類,工廠模式使其建立過程延遲到子類進行。主要解決 主要解決介面選擇的問題。何時使用 我們明確地計畫不同條件下建立不同例項時。如何解決 讓其子類實現工廠介面,返回的也是乙個抽象的產品。關鍵 建立過程在其子類執行。步驟 建立乙個介面 形狀sh...
建立型模式(抽象工廠模式)
目錄總結 當系統所提供的工廠所需生產的具體產品並不是乙個簡單的物件,而是多個位於不同產品等級結構中屬於不同型別的具體產品時需要使用抽象工廠模式。抽象工廠模式是所有形式的工廠模式中最為抽象和最具一般性的一種形態。抽象工廠模式與工廠方法模式最大的區別在於,工廠方法模式針對的是乙個產品等級結構,而抽象工廠...
抽象工廠模式 建立型模式
1 描述 抽象工廠模式是一種建立型設計模式,它能建立一系列相關的物件,而無需指定其具體類。什麼是 系列物件 例如有這樣一組的物件 運輸工具 引擎 控制器。它可能會有幾個變體 汽車 內燃機 方向盤飛機 噴氣式發動機 操縱桿 如果你的程式中並不涉及產品系列的話,那就不需要抽象工廠。優點 封裝性,每個產品...