參考
- 《設計模式解析》 第十一章 Abstract Factory模式
- 《設計模式:可複用面向對象軟件的基礎 》3.1 Abstract Factory 抽象工廠 對象建立型模式
- 《Android源碼設計模式解析與實戰》第6章 建立型設計模式--抽象工廠模式
意圖
協調對象的實例化,提供一個建立一系列相關或相互依賴對象的接口,而無需指定它們具體的類。編程
我以爲就是在工廠方法模式裏的工廠類再作一層抽象,從一維抽象升級爲二維抽象,在縱向的基礎上又加了橫向。設計模式
別名
Kitspa
適用場景
- 一個系統要獨立於它的產品建立,組合和表示時。
- 一個系統要由多個產品系列中的一個來配置時。
- 當你要強調一系列相關的產品對象的設計以便進行聯合使用時。
結構

- AbstracFactory: 抽象工廠,它聲明瞭一組用於建立產品的方法,每個方法對應一種產品。
- ConcreteFactory: 具體工廠,它實現了在抽象工廠中定義的建立產品的方法,生成一組具體產品,這些產品構成了一個產品種類,每個產品都位於某個產品等級結構中。
- AbstractProduct: 抽象產品角色,他爲每種產品聲明接口
- ConcreteProduct: 具體產品角色,他定義了具體工廠生產的具體產品對象,實現抽象產品接口中聲明的業務方法。
例子1 車廠造車
描述
奧迪Q3,Q5,Q7都是一個車系,可是三者之間的零部件差異倒是很大,好比Q3的發動機是國產的,Q7是原裝進口的,Q3的輪胎是普通輪胎,Q7是越野輪胎。因此工廠造一輛車,要分別造發動機,輪胎,制動系統組成。設計
結構

代碼實現
有類圖了,略對象
應用例子2 Android中的MediaPlayerFactory
優勢
- 分離接口和實現,客戶端使用抽象工廠來建立須要的對象,而客戶端根本不知道具體的實現是誰,客戶端只是面向產品的接口編程而已。
缺點
- 使類文件爆炸
- 不太容易擴展新的產品類,每當咱們想要增長一個產品類就須要修改抽象工廠,那麼全部的具體工廠都要修改。