定義
提供乙個建立一系列相關或者相互依賴物件的介面,而無需指定它們具體的類。
目的
抽象工廠模式針對的是多個抽象產品等級結構,而每乙個抽象產品有多餘乙個的具體子類。比如要設計一款圖形設計軟體,要求它可以在不同的平台上執行,由於不同的平台介面風格有所不同,這時候就需要提供乙個抽象的工廠類widgetfactory,它提供了建立各種控制項所需要的方法。對於不同的平台,需要建立不同的子類,比如windowswidgetfactory,macwidgetfactory。當需要建立控制項的時候,每乙個控制項也是乙個抽象工廠體系。
實現
ibutton.h
class
ibutton
;
windowsbutton.h
macbutton.h#include
"ibutton.h"
class
windowsbutton:public
ibutton
};
imenu.h#include
"ibutton.h"
class
macbutton:public
ibutton
};
class
imenu
;
windowsmenu.h
macmenu.h#include
"imenu.h"
class
windowsmenu:public
imenu
};
widgetfactory.h#include
"imenu.h"
class
macmenu:public
imenu
};
windowswidgetfactory.hclass
ibutton
;
class
imenu;
class
widgetfactory
;
macwidgetfactory.h#include
"windowsbutton.h"
#include
"windowsmenu.h"
#include
"widgetfactory.h"
class
windowswidgetfactory
:public
widgetfactory
;
virtual
imenu
*createmenu
();
};
main.cpp#include
"macbutton.h"
#include
"macmenu.h"
#include
"widgetfactory.h"
class
macwidgetfactory
:public
widgetfactory
;
virtual
imenu
*createmenu
();
};
適用性優缺點分離了具體的類 : 乙個工廠封裝了建立產品的責任和過程,客戶通過它的抽象介面操作例項。#include
"windowswidgetfactory.h"
#include
"macwidgetfactory.h"
int
main
()
易於交換產品系類 : 乙個具體的工廠類在乙個應用中只出現一次,即初始化的時候,這使得改變乙個應用的具體工廠變得容易。
有利於產品的一致性 : 當一些列的產品設計成在一起工作時,乙個應用一次只能建立乙個系列的產品。
難以支援新的產品 : 當要擴充新產品的時候,擴充介面,會使得抽象工廠類和它的所有子類都要修改。
相關模式
工廠方法模式:乙個抽象工廠類派生多個具體工廠類,乙個抽象產品類派生多個具體產品類。每個具體工廠只能建立乙個具體產品類例項。比如只能有個控制項產品類menu,子類windowmenu和macmenu,windowswidgetfactory只能建立windowmenu,macwidgetfactory只能建立macmenu。
抽象工廠模式:乙個抽象工廠類派生多個具體工廠類。多個抽象產品類派生多個具體產品類。每個具體工廠能建立多個具體產品類例項。可以同時擁有多個控制項產品類,windowswidgetfactory可以建立windowmenu和windowbutton,macwidgetfactory可以建立macmenu和macbutton。
抽象工廠,Abstract Factory
抽象工廠的定義是 提供乙個介面用於建立一系列相關或依賴的物件,而不需要指定具體的類。其uml類圖的示例如下 在這個模式中,參與者包括 實現 public inte ce abstractfactory public class concretefactorya abstractfactory pub...
設計模式 AbstractFactory
回想工廠方法模式,大廳可能有多種風格,a和b的widget也可能是不同組別不同人進行開發。這種情況下乙個工廠類顯然對 結構,程式可維護性有影響。我們可以建立多個widgetfactory分別生成a,b類的widget。abstractfactory.h ifndef abstractfactory ...
抽象工廠(Abstract Factory)
抽象工廠 abstract factory 抽象工廠,提供乙個建立一系列相關或相互依賴物件的介面,而無需指定它們具體的類。別名 kit結構 參與者 abstractfactory 宣告乙個建立抽象產品物件的操作介面。concretefactory 實現建立具體產品物件的操作。abstractprod...