定義:為建立一組相關或者是相互依賴的物件提供介面,而不需要指定它們的具體類
使用場景:乙個物件族有相同的約束時可以使用抽象工廠模式。
類圖:
抽象工廠模式與工廠方法模式的區別:
抽象工廠模式是工廠方法模式的公升級版本,他用來建立一組相關或者相互依賴的物件。他與工廠方法模式的區別就在於,工廠方法模式針對的是乙個產品等級結構;而抽象工廠模式則是針對的多個產品等級結構。在程式設計中,通常乙個產品結構,表現為乙個介面或者抽象類,也就是說,工廠方法模式提供的所有產品都是衍生自同乙個介面或抽象類,而抽象工廠模式所提供的產品則是衍生自不同的介面或抽象類。
在抽象工廠模式中,有乙個產品族的概念:所謂的產品族,是指位於不同產品等級結構中功能相關聯的產品組成的家族。抽象工廠模式所提供的一系列產品就組成乙個產品族;而工廠方法提供的一系列產品稱為乙個等級結構。下面是抽象工廠的**:
inte***ce
iproduct1
inte***ce
iproduct2
class
product1
implements
iproduct1
} class
product2
implements
iproduct2
} inte***ce
ifactory
class
factory
implements
ifactory
public iproduct2 createproduct2()
} public
class
client
}
抽象工廠方法模式的優點:乙個顯著的優點是分離介面與實現,客戶端使用抽象工廠來建立需要的物件,而客戶端根本就不知道具體的實現類是誰,客戶端只是面向產品的介面程式設計而已,使其從具體的產品實現中解耦,同時基於介面與實現的分離,使抽象該工廠方法模式在切換產品類時更加靈活,容易。
抽象工廠方法模式的缺點:
上面我們也有提及,一是類檔案的**性增加,二是不太容易擴充套件新的產品類,因為每當我們增加乙個產品類就需要修改抽象工廠,那麼所有的具體工廠類均會被修改。所以使用抽象工廠模式時,對產品等級結構的劃分是非常重要的。
總結:
無論是簡單工廠模式,工廠方法模式,還是抽象工廠模式,他們都屬於工廠模式,在形式和特點上也是極為相似的,他們的最終目的都是為了解耦。在使用時,我們不必去在意這個模式到底工廠方法模式還是抽象工廠模式,因為他們之間的演變常常是令人琢磨不透的。經常你會發現,明明使用的工廠方法模式,當新需求來臨,稍加修改,加入了乙個新方法後,由於類中的產品構成了不同等級結構中的產品族,它就變成抽象工廠模式了;而對於抽象工廠模式,當減少乙個方法使的提供的產品不再構成產品族之後,它就演變成了工廠方法模式。
所以,在使用工廠模式時,只需要關心降低耦合度的目的是否達到了。
23種設計模式之 抽象工廠模式
提供乙個建立一系列相關或相互依賴物件的介面,而無需指定它們具體的類 相比入工廠模式而言,如果說工廠模式支援增加任意產品。那麼抽象工廠模式增加新的產品線很容易,但是無法增加新的產品。而簡單工廠模式和工廠模式的區別可以認為工廠模式是優化了簡單工廠模式,遵循了開閉原則 public inte ce com...
23種設計模式之抽象工廠模式
抽象工廠模式定義 提供乙個建立一系列的相關的或者依賴的物件的介面,無需指定它們的具體實現類,具體的時間分別在子類工廠中產生。優點 隔離了具體類的生產實現,使得替換具體的工廠實現類很容易。包含模組有 1.抽象產品介面 定義產品的介面,公共的暴露方法。便於實際的產品類實現。2.具體的產品類 包含實際產品...
23種設計模式01 工廠模式之抽象工廠模式
在上篇文章23種設計模式01 工廠模式 中介紹了簡單工廠模式和工廠方法模式,但是簡單工廠模式在新增新的產品師,需要修改工廠類,違背了開閉原則 ocp原則 工廠方法模式,提供乙個抽象工廠角色,一旦要建立新的同一產品的不同型號,只需要建立乙個具體工廠角色,用於建立對應的產品,而不用修改原有的 解決了簡單...