1.意圖
提供一個創建一系列相關或相互依賴對象的接口,而無需指定它們具體的類,
2.別名
Kit
3.動機
我的工廠需要生產的產品是一系列的對象,而不是一個單一的對象時需要抽象工廠來解決。
首先我們先來了解倆個概念
1)產品等級結構:即產品的繼承結構,如一個抽象類是電視機,其子類有海爾電視機、海信電視機、TCL電視機,則抽象電視機與具體品牌的電視機之間構成了一個產品等級結構,抽象電視機是父類,而具體品牌的電視機是其子類。
2) 產品族:在抽象工廠模式中,產品族是指由同一個工廠生產的,位於不同產品等級結構中的一組產品,如海爾電器工廠生產的海爾電視機、海爾電冰箱,海爾電視機位於電視機產品等級結構中,海爾電冰箱位於電冰箱產品等級結構中。
產品族與產品等級結構示意圖見如下:
舉一個例子
抽象工廠是爲了一個產品族而進行生產的
4.適用性
在以下情況使用Abstract Factory模式
- 一個系統要獨立於它的產品的創建,組合,表示時。
- 一個系統要由多個產品系列中的一個來配置。
- 當你要強調一系列相關產品對象的設計以便進行聯合使用時。
- 當你提供一個產品類庫時,而只想顯示他們的接口而不是實現時。
5.結構
6.參與者
- AbstractFactory 聲明一個創建抽象產品對象的操作接口
- ConcreteFactory 實現創建具體產品對象的操作
- AbstractProduct 爲一類產品對象聲明一個接口
- ConcretePrduct 定義一個將被相應的具體工廠創建的產品對象,實現AbstractProduct接口
- Client 僅使用有AbstractFacotory和AbstractProduct類聲明的接口。
7.協作
通常在運行時創建一個ConcreteFactory類的實例。來創建特定的產品對象。創建不同的對象要用不同的工廠。
8.效果
- 它分離了具體的類。你只需要控制創建對象的類,用它來創建對應的你需要的產品,而不需要知道它是怎麼創建的。
- 它使得易於交換產品系列。在更換一系列產品時,只需要改變具體的工廠就可以改變,
- 它有利於產品的一致性。它可以保證使用應用的時候使用的是一個系列的產品來協調工作
- 難以支持新種類的產品。