設計模式學習筆記(一) 抽象工廠模式

2022-05-08 12:30:08 字數 2614 閱讀 4506

一、首先學術一下:

(以下內容來自:設計模式 可復用物件導向軟體的基礎  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 產品。

所以,

//

生成我們的產品,需要用到 producta1 和 producta2

void

createourproduct()

可是,有一天,a公司突然提高了**(世事多變!)。經過慎重考慮,我們打算換一家公司。調查後,發現 b 公司生產的 productb1, productb2 與a 公司生產的 producta1, producta2 是一樣的,而且 b 公司的**較為合理。然後,我們進行產品線調整。

//

生成我們的產品,需要用到 productb1 和 productb2

void

createourproduct()

不過,我們發現雖然公司b的**比較低,但是質量似乎不是那麼好。所以,我們打算再換回使用公司a。於是,我們又得啟用原來的方案。接著,我們不得不再換其它的公司。因為,我們得隨時關注動態,選擇對我們最好的方案。

那麼,怎麼可以讓我們不用在每次做新的決策後,就要進行大動作,這樣維護成本太高了。然後,我們想到了 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;

然後,我們可以很方便地隨時更換我們的合作公司。

public

createourproduct()

設計模式之(一)抽象工廠模式

我理解的抽象工廠模式其實就是為物件提供建立介面,呼叫建立介面就能得到想要的物件。舉例 比如說需要和文字轉換類,傳如文字內容獲取路徑和名稱,需要得到 或文字 的html標籤或者是 或文字 的json decode資料,在如下圖的抽象工廠模式中,我們只需要呼叫業務工廠類 htmlfactory或json...

設計模式C 實現十一 抽象工廠模式

抽象工廠模式 abstract factory 提供乙個建立一系列相關或者相互依賴物件的介面,而無需指定他們具體的類。優點 便於交換產品系統,由於具體工廠類,在乙個應用中只需要初始化的時候出現一次,這就使得改變乙個應用的具體工廠變得非常容易,只需要改變具體工廠即可以使用不同的產品配置。它讓具體的建立...

設計模式學習筆記 抽象工廠模式

定義 為建立一組相關或相互依賴的物件提供一組介面,而且無需指定它們的具體類。抽象工廠模式是工廠模式的公升級版本,因為它應對的是更加複雜的業務,即當有多個業務品種 業務分類時,通過抽象工廠模式產生需要的物件是一種非常好的解決方式。由於抽象工廠類較為複雜,我覺得使用乙個具體的例子,更能形象的表達這個模式...