【設計模式】Java設計模式之抽象工廠模式

目錄

一、爲何要用抽象工廠模式

二、模式定義

三、模式結構

四、模式優點

五、模式缺點

六、模式適用環境


一、爲何要用抽象工廠模式

  • 當系統所提供的工廠所需生產的具體產品並不是一個簡單的對象,而是多個位於不同產品等級結構中屬於不同類型的具體產品時需要使用抽象工廠模式。
  • 抽象工廠模式是所有形式的工廠模式中最爲抽象和最具一般性的一種形態
  • 抽象工廠模式與工廠方法模式最大的區別在於,工廠方法模式針對的是一個產品等級結構,而抽象工廠模式則需要面對多個產品等級結構,一個工廠等級結構可以負責多個不同產品等級結構中的產品對象的創建 。當一個工廠等級結構可以創建出分屬於不同產品等級結構的一個產品族中的所有對象時,抽象工廠模式比工廠方法模式更爲簡單、有效率

二、模式定義

抽象工廠模式(Abstract Factory Pattern):提供一創建一系列相關或相互依賴對象的接口,而無須指定它們具體的類。抽象工廠模式又稱爲Kit模式,屬於象創建型模式

三、模式結構

抽象工廠模式包含如下角色:
AbstractFactory:抽象工廠
ConcreteFactory:具體工廠
AbstractProduct:抽象產品
Product:具體產品

四、模式優點

抽象工廠模式隔離了具體類的生成,使得客戶並不需要知道什麼被創建。由於這種隔離,更換一個具體工廠就變得相對容易。所有的具體工廠都實現了抽象工廠中定義的那些公共接口,因此只需改變具體工廠的實例,就可以在某種程度上改變整個軟件系統的行爲。另外,應用抽象工廠模式可以實現高內聚低耦合的設計目的,因此抽象工廠模式得到了廣泛的應用。
當一個產品族中的多個對象被設計成一起工作時,它能夠保證客戶端 始終只使用同一個產品族中的對象。這對一些需要根據當前環境來決定其行爲的軟件系統來說,是一種非常實用的設計模式。
增加新的具體工廠和產品族很方便,無須修改已有系統,符合“開閉原則”。

五、模式缺點

在添加新的產品對象時,難以擴展抽象工廠來生產新種類的產品,這是因爲在抽象工廠角色中規定了所有可能被創建的產品
集合,要支持新種類的產品就意味着要對該接口進行擴展,這將涉及到對抽象工廠角色及其所有子類的修改,顯然會帶來較大的不便。
開閉原則的傾斜性(增加新的工廠和產品族容易,增加新的產品等級結構麻煩)

六、模式適用環境

在以下情況下可以使用抽象工廠模式:
一個系統不應當依賴於產品類實例如何被創建、組合和表達的細節,這對於所有類型的工廠模式都是重要的。
系統中有多於一個的產品族,而每次只使用其中某一產品族。
屬於同一個產品族的產品將在一起使用,這一約束必須在系統的設計中體現出來。
系統提供一個產品類的庫,所有的產品以同樣的接口出現,從而使客戶端不依賴於具體實現
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章