工廠方法模式通過引入工廠等級結構,解決了簡單工廠模式中工廠類職責太重的問題,但由於工廠方法模式中的每個工廠只生產一類產品,可能會導致系統中存在大量的工廠類,勢必會增加系統的開銷。此時,我們可以考慮將一些相關的產品組成乙個「產品族,由同乙個工廠來統一生產,這就是我們本文將要學習的抽象工廠模式的基本思想。
「工廠方法模式」實現多區域水果類圖
1.當我們想新增乙個新產品的時候,比如葡萄,雖然不用修改**,但是我們需要新增大量的類,而且還需要新增相對的工廠。(系統開銷,維護成本)
2.如果我們使用同一地域的水果(日本,日本,日本),那麼我們需要分別建立具體的工廠,如果選擇出現失誤,將會造成混亂,雖然可以加一些約束,但是**實現變得複雜。
抽象工廠(abstract factory)角色:它宣告了一組用於建立一族產品的方法,每乙個方法對應一種產品。
具體工廠(concrete factory)角色:它實現了在抽象工廠中宣告的建立產品的方法,生成一組具體產品,這些產品構成了乙個產品族,每乙個產品都位於某個產品等級結構中。
抽象產品(abstract product)角色:它為每種產品宣告介面,在抽象產品中宣告了產品所具有的業務方法。
具體產品(concrete product)角色:它定義具體工廠生產的具體產品物件,實現抽象產品介面中宣告的業務方法。
#define _crt_secure_no_warnings
#include
using
namespace std;
//抽象蘋果類
class
;//抽象香蕉
class
abstractbanana
;//抽象鴨梨
class
abstractpear
;//中國蘋果
class:}
;//美國蘋果
class:}
;//日本蘋果
class:}
;//中國香蕉
class
chinesebanana
:public abstractbanana };
//美國香蕉
class
americanbanana
:public abstractbanana };
//日本香蕉
class
japanesebanana
:public abstractbanana};
//中國鴨梨
class
chinesepear
:public abstractpear };
//美國鴨梨
class
americanpear
:public abstractpear };
//日本鴨梨
class
japanesepear
:public abstractpear };
//抽象工廠
class
abstractfactory
;//中國工廠
class
chinesefactory
:public abstractfactory
virtual abstractbanana*
createbanana()
virtual abstractpear*
createpear()
};//美國工廠
class
americanfactory
:public abstractfactory
virtual abstractbanana*
createbanana()
virtual abstractpear*
createpear()
};//美國工廠
class
japanesefactory
:public abstractfactory
virtual abstractbanana*
createbanana()
virtual abstractpear*
createpear()
};void
test01()
intmain()
優點:
(1)擁有工廠方法模式的優點
(2)當乙個產品族中的多個物件被設計成一起工作時,它能夠保證客戶端始終只使用同乙個產品族中的物件。
(3)增加新的產品族很方便,無須修改已有系統,符合「開閉原則」。
缺點:增加新的產品等級結構麻煩,需要對原有系統進行較大的修改,甚至需要修改抽象層**,這顯然會帶來較大的不便,違背了「開閉原則」。
(1) 系統中有多於乙個的產品族。而每次只使用其中某一產品族。可以通過配置檔案等方式來使得使用者可以動態改變產品族,也可以很方便地增加新的產品族。
(2) 產品等級結構穩定。設計完成之後,不會向系統中增加新的產品等級結構或者刪除已有的產品等級結構。
設計模式 建立型模型 抽象工廠模式
是一種為訪問類提供乙個建立一組相關或相互依賴物件的介面,且訪問類無須指定所要產品的具體類就能得到同族的不同等級的產品的模式結構。抽象工廠模式是工廠模式的公升級版本,工廠方法模式只生產乙個等級的產品,而抽象工廠模式可生產多個等級的產品。使用抽象工廠模式一般需要滿足以下條件 優點 抽象工廠模式除了具有工...
建立型模式 抽象工廠
提供乙個建立一系列相關或相互依賴物件的介面,而無需指定它們具體的類。抽象工廠模式 abstract factory 是乙個比較複雜的建立型模式。抽象工廠模式和工廠方法不太一樣,它要解決的問題比較複雜,不但工廠是抽象的,產品是抽象的,而且有多個產品需要建立,因此,這個抽象工廠會對應到多個實際工廠,每個...
建立型模式(抽象工廠模式)
目錄總結 當系統所提供的工廠所需生產的具體產品並不是乙個簡單的物件,而是多個位於不同產品等級結構中屬於不同型別的具體產品時需要使用抽象工廠模式。抽象工廠模式是所有形式的工廠模式中最為抽象和最具一般性的一種形態。抽象工廠模式與工廠方法模式最大的區別在於,工廠方法模式針對的是乙個產品等級結構,而抽象工廠...