Abstract Factory 抽象工廠模式

2021-06-22 14:18:36 字數 3169 閱讀 1077

定義

​提供乙個建立一系列相關或者相互依賴物件的介面,而無需指定它們具體的類。

目的

​抽象工廠模式針對的是多個抽象產品等級結構,而每乙個抽象產品有多餘乙個的具體子類。比如要設計一款圖形設計軟體,要求它可以在不同的平台上執行,由於不同的平台介面風格有所不同,這時候就需要提供乙個抽象的工廠類widgetfactory,它提供了建立各種控制項所需要的方法。對於不同的平台,需要建立不同的子類,比如windowswidgetfactory,macwidgetfactory。當需要建立控制項的時候,每乙個控制項也是乙個抽象工廠體系。

實現

ibutton.h

class

ibutton

;

windowsbutton.h

#include

"ibutton.h"

classwindowsbutton

:public

ibutton

};

macbutton.h

#include

"ibutton.h"

classmacbutton

:public

ibutton

};

imenu.h

class

imenu

;

windowsmenu.h

#include

"imenu.h"

classwindowsmenu

:public

imenu

};

macmenu.h

#include

"imenu.h"

classmacmenu

:public

imenu

};

widgetfactory.h

class

ibutton

;classimenu

;class

widgetfactory

;

windowswidgetfactory.h

#include

"windowsbutton.h"

#include"windowsmenu.h"

#include

"widgetfactory.h"

class

windowswidgetfactory

:public

widgetfactory

;

virtual

imenu

*createmenu

();};

macwidgetfactory.h

#include

"macbutton.h"

#include"macmenu.h"

#include

"widgetfactory.h"

class

macwidgetfactory

:public

widgetfactory

;

virtual

imenu

*createmenu

();};

main.cpp

#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...