一、首先學術一下:
(以下內容來自:設計模式 可復用物件導向軟體的基礎 erich gamma, richard helm, ralph johnson, john vlissides 著 李英軍 馬曉星 蔡敏 劉建中 等譯 呂建 審校)
抽象工廠模式: abstract factory
1 意圖
提供乙個建立一系列相關或相互依賴物件的介面,而無需指定它們具體的類
2 適用性
1. 乙個系統要獨立於它的產品的建立、組合和表示時
2. 乙個系統要由多個產品系列中的乙個來配置時
3. 當你要強調一系列相關的產品物件的設計以便進行聯合使用時
4. 當你提供乙個產品類庫,而只想顯示它們的介面而不是實現時
3 參與者
abstractfactory: 宣告乙個建立抽象產品物件的操作介面
concretefactory: 實現建立具體產品物件的操作
abstractproduct: 為一類產品物件宣告乙個介面
concreteproduct:定義乙個將被相應的具體工廠建立的產品物件;實現 abstractproduct介面
4 協作
1)執行時建立乙個concretefactory類的例項。為建立不同的產品物件,客戶應使用不同的具體工廠
2)abstractfactory將產品物件的建立延遲到它的concretefactory子類
5 效果
1)分離了具體的烊
2)易於交換產品系列
3)利於產品的一致性,乙個應用一次只能使用同乙個系列中的物件
4)難以擴充套件抽象工廠以生產新各類的產品(缺點)
二、例項
場景:我們公司現在要開發乙個新的產品,需要用到其它公司的零件來進行組裝。開始的時候,我們和 a 公司合作, 使用他們生產的 procucta1 和 producta2 產品。
所以,
//可是,有一天,a公司突然提高了**(世事多變!)。經過慎重考慮,我們打算換一家公司。調查後,發現 b 公司生產的 productb1, productb2 與a 公司生產的 producta1, producta2 是一樣的,而且 b 公司的**較為合理。然後,我們進行產品線調整。生成我們的產品,需要用到 producta1 和 producta2
void
createourproduct()
//不過,我們發現雖然公司b的**比較低,但是質量似乎不是那麼好。所以,我們打算再換回使用公司a。於是,我們又得啟用原來的方案。接著,我們不得不再換其它的公司。因為,我們得隨時關注動態,選擇對我們最好的方案。生成我們的產品,需要用到 productb1 和 productb2
void
createourproduct()
那麼,怎麼可以讓我們不用在每次做新的決策後,就要進行大動作,這樣維護成本太高了。然後,我們想到了 abstract factory。我們生產的產品,不再依賴於產品,而是依賴於公司。我們只需要確定要和哪家公司合作,而不用具體關心每乙個產品
//這是介面,包含兩個操作,生產 product1 和 product2
public
abstract
class
factory:;//
a 公司繼承了 abstract factory,實現具體的生產
public
class factorya: public
factory;//
b 公司繼承了 abstract factory,實現具體的生產。和a 公司生產同樣的產品
public
class factoryb: public
factory
;
//product1 是乙個抽象類,它具有一些屬性
public
abstract
class
product1:;//
producta1 是由 公司 a 生產的
poublic class producta1: public
product1;
//productb1 是由 公司 b 生產的
poublic class productb1: public
product1;
//然後,我們可以很方便地隨時更換我們的合作公司。product2 是乙個抽象類
public
abstract
class
product2;//
producta2 是由公司a生產的
public
class producta2: public
product2;
//productb2 是由公司b生產的
public
class productb2: public
product2;
publiccreateourproduct()
設計模式之(一)抽象工廠模式
我理解的抽象工廠模式其實就是為物件提供建立介面,呼叫建立介面就能得到想要的物件。舉例 比如說需要和文字轉換類,傳如文字內容獲取路徑和名稱,需要得到 或文字 的html標籤或者是 或文字 的json decode資料,在如下圖的抽象工廠模式中,我們只需要呼叫業務工廠類 htmlfactory或json...
設計模式C 實現十一 抽象工廠模式
抽象工廠模式 abstract factory 提供乙個建立一系列相關或者相互依賴物件的介面,而無需指定他們具體的類。優點 便於交換產品系統,由於具體工廠類,在乙個應用中只需要初始化的時候出現一次,這就使得改變乙個應用的具體工廠變得非常容易,只需要改變具體工廠即可以使用不同的產品配置。它讓具體的建立...
設計模式學習筆記 抽象工廠模式
定義 為建立一組相關或相互依賴的物件提供一組介面,而且無需指定它們的具體類。抽象工廠模式是工廠模式的公升級版本,因為它應對的是更加複雜的業務,即當有多個業務品種 業務分類時,通過抽象工廠模式產生需要的物件是一種非常好的解決方式。由於抽象工廠類較為複雜,我覺得使用乙個具體的例子,更能形象的表達這個模式...