設計模式之抽象工廠模式

2021-06-22 16:38:01 字數 1911 閱讀 7719

1、抽象工廠模式(abstract factory)提高乙個建立一系列相關或相互依賴物件的介面,而無需指定它們具體的類。

abstractproducta和abstractproductb是兩個抽象產品,之所以為抽象,是因為它們都有可能有兩種不同的實現。

2、abstractfactory是乙個抽象工廠介面,它裡面應該包含所有的產品建立的抽象方法。而concretefactory1和concretefactory2就是具體的工廠了。

通常是在執行時刻再建立乙個concretefactory類的例項,這個具體的工廠再建立具有特定的產品物件也就是說,為建立不同產品物件,客戶端應該使用不同的具體工廠。

uml圖如下:

3、抽象工廠模式的優點和缺點

最大的好處便是易於交換產品系列,由於具體工廠類,例如ifactory factory = new accessfactory(),在乙個應用中只需要在初始化的時候出現一次,就使得改變乙個應用的具體工廠變得非常容易,它只需要改變具體工廠即可使用不同產品配置。

第二大好處是,它讓具體的建立例項過程與客戶端分離,客戶端是通過它們的抽象介面例項,產品的具體類名也被具體工廠實現分離,不會出現在客戶端的**上。

缺點:但是將來要是你想增加功能,比如我們現在要增加專案表project,需要改動哪些地方?

那麼至少要增加三個類,abstractproductc,productc1,productc2,還需要更改abstractfactory,concretefactory1,concretefactory2才可以完全實現。

4、c++**實現

[cpp]view plain

copy

#include 

using

namespace

std;  

//抽象產品類a,

//定義了具體產品類a統一的介面

class

abstractproducta  

;  //抽象產品類b

//定義了具體產品類b統一的介面

class

abstractproductb  

;  //抽象工廠,它裡面應該包含

//所有產品建立的抽象方法

class

abstractfactory   

;  //具體產品

class

producta1 : 

public

abstractproducta  

};  

//具體產品

class

producta2 : 

public

abstractproducta  

};  

//具體產品

class

productb1 : 

public

abstractproductb  

};  

//具體產品

class

productb2 : 

public

abstractproductb  

};  

//具體工廠,建立具有特定

//實現的產品物件

class

concretefactory1 : 

public

abstractfactory  

abstractproductb * createproductb()   

};  

//具體工廠,建立具有特定

//實現的產品物件

class

concretefactory2 : 

public

abstractfactory  

abstractproductb * createproductb()   

};  

intmain()     

抽象工廠模式 設計模式3之抽象工廠模式

工廠方法模式中工廠只負責同類產品的生產。比如電視機工廠不應該生產汽車。然而現實生活中有很多綜合型的工廠,比如有些電視工廠不僅生產電視機,還會生產與之配套的機頂盒。那麼抽象工廠模式隨之誕生,這種模式將考慮多種型別產品的生產。我們總結下 工廠方法模式只考慮成產同一等級級的產品抽象方法模式考慮生產多等級的...

設計模式之抽象工廠模式

目標 定義了乙個建立一系列相關或相互依賴的介面,而無需指定它們的具體類。用於交換產品系列,如 access sql server 產品的具體類名被具體工廠的實現分離 下面是示例 include include include using namespace std 使用者抽象介面 class ius...

設計模式之抽象工廠模式

定義 abstract factory,提供乙個建立一系列相關或相互依賴物件的介面,而無需制定它們具體的類 場景 有一家生產螺絲螺帽的工廠,螺絲有兩種型號 公的和母的,螺帽也有兩種型號 公的和母的。沒個車間只生產一種螺絲和螺帽。這裡車間就是乙個concretefactory 具體工廠 螺絲和螺帽便是...