模式動機:工廠方法模式一般針對的是乙個產品等級結構(如僅生產電視機),而抽象工廠模式針對的是多個產品等級結構(如不僅生產電視機,還生產空調)。
模式定義:乙個具體工廠可以建立乙個產品族的所有產品,又稱為kit模式。
模式結構圖:
模式**:
bt_抽象工廠模式.h:
#ifndef afp_h
#define afp_h
#include /*
抽象產品介面
*/class abstractproducta;};
class abstractproductb;};
/* 具體產品類a
*/class concreteproducta1 : public abstractproducta
;concreteproducta1::concreteproducta1()
class concreteproducta2 : public abstractproducta
;concreteproducta2::concreteproducta2()
/* 具體產品類b
*/class concreteproductb1 : public abstractproductb
;concreteproductb1::concreteproductb1()
class concreteproductb2 : public abstractproductb
;concreteproductb2::concreteproductb2()
/* 抽象工廠介面
*/class abstractfactory
; virtual abstractproducta* createproducta() = 0;
virtual abstractproductb* createproductb() = 0;
};/*
具體工廠concretefactory1負責生產 "產品族1"
*/class concretefactory1 : public abstractfactory
;abstractproducta* concretefactory1::createproducta()
abstractproductb* concretefactory1::createproductb()
/* 具體工廠concretefactory2負責生產 "產品族2"
*/class concretefactory2 : public abstractfactory
;abstractproducta* concretefactory2::createproducta()
abstractproductb* concretefactory2::createproductb()
#endif // afp_h
bt_抽象工廠模式.cpp:
#include "bt_抽象工廠模式.h"
#include int main()
模式優缺點:新增新的產品族(即乙個新的品牌)比較容易,此時只需要定義新的工廠和產品類即可;但增加產品等級(即原有品牌的種類)比較麻煩,此時必須修改抽象工廠以新增新種類的生產介面,同時所有已有的產品族工廠也要修改,這就違背了「開閉原則」。該模式具體應用中一般適合物件的多種狀態同時發生變化時,比如作業系統中的主題管理程式等。
比較:
抽象工廠模式針對的是多個產品等級,而工廠方法模式針對的是乙個產品等級,抽象工廠模式經過退化後完全可以變為工廠方法模式,甚至是簡單工廠模式。
設計模式3 抽象工廠模式(建立型模式)
抽象工廠模式是工廠模式的公升級。相對而言,抽象工廠模式並不像工廠模式那麼好理解,看了不少網上部落格的描述,感覺都說說的雲裡霧裡,個人覺得還是把抽象問題具體化更好。推崇 大話設計模式 中的講解模式。本文講以更通俗的語言,結合 大話設計模式 中使用的例項,把抽象工廠模式理清楚。先總結下個人對工廠模式的理...
建立型模式 工廠模式and抽象工廠模式
意圖 定義乙個建立物件的介面,讓其子類自己決定例項化哪乙個工廠類,工廠模式使其建立過程延遲到子類進行。主要解決 主要解決介面選擇的問題。何時使用 我們明確地計畫不同條件下建立不同例項時。如何解決 讓其子類實現工廠介面,返回的也是乙個抽象的產品。關鍵 建立過程在其子類執行。步驟 建立乙個介面 形狀sh...
建立型模式(抽象工廠模式)
目錄總結 當系統所提供的工廠所需生產的具體產品並不是乙個簡單的物件,而是多個位於不同產品等級結構中屬於不同型別的具體產品時需要使用抽象工廠模式。抽象工廠模式是所有形式的工廠模式中最為抽象和最具一般性的一種形態。抽象工廠模式與工廠方法模式最大的區別在於,工廠方法模式針對的是乙個產品等級結構,而抽象工廠...