設計模式之工廠方法模式 C 實現

2021-10-12 21:57:06 字數 3079 閱讀 3250

更多設計模式參看: 設計模式之模式概述(模式彙總)(c++實現)

模式結構

**示例

簡單工廠模式中,******factory類中有一組 if 分支判斷邏輯,由於這個分支判斷邏輯當系統中需要引入新產品時,由於靜態工廠方法通過所傳入引數的不同來建立不同的產品,這必定要修改工廠類的源**,將違背「開閉原則」

是不是應該用多型或其他設計模式來替代呢?實際上,如果 if 分支並不是很多,**中有 if 分支也是完全可以接受的。應用多型或設計模式來替代 if 分支判斷邏輯,也並不是沒有任何缺點的,它雖然提高了**的擴充套件性,更加符合開閉原則,但也增加了類的個數,犧牲了**的可讀性。

如果我們非得要將 if 分支邏輯去掉,那該怎麼辦呢?比較經典處理方法就是利用多型。在******factory之上再抽象一層。

工廠方法模式是對簡單工廠模式的進一步抽象化,其好處是可以使系統在不修改原來**的情況下引進新的產品,即滿足開閉原則。

工廠方法模式(factory method pattern):定義乙個用於建立物件的介面,讓子類決定將哪乙個類例項化。工廠方法模式讓乙個類的例項化延遲到其子類。工廠方法模式又簡稱為工廠模式(factory pattern),又可稱作虛擬構造器模式(virtual constructor pattern)或多型工廠模式(polymorphic factory pattern)。工廠方法模式是一種類建立型模式。

工廠方法模式提供乙個抽象工廠介面來宣告抽象工廠方法,而由其子類來具體實現工廠方法,建立具體的產品物件。

基於工廠角色和產品角色的多型性設計是工廠方法模式的關鍵。不再提供乙個統一的工廠類來建立所有的產品物件,而是針對不同的產品提供不同的工廠,系統提供乙個與產品等級結構對應的工廠等級結構。

在以下情況下可以考慮使用工廠方法模式:

​ (1) 客戶端不知道它所需要的物件的類。在工廠方法模式中,客戶端不需要知道具體產品類的類名,只需要知道所對應的工廠即可,具體的產品物件由具體工廠類建立,可將具體工廠類的類名儲存在配置檔案或資料庫中。

​ (2) 抽象工廠類通過其子類來指定建立哪個物件。在工廠方法模式中,對於抽象工廠類只需要提供乙個建立產品的介面,而由其子類來確定具體要建立的物件,利用物件導向的多型性和黎克特制代換原則,在程式執行時,子類物件將覆蓋父類物件,從而使得系統更容易擴充套件。

//抽象產品類

class

abstractproduct

;//具體產品類

class

concreteproduct

:public abstractproduct

;//抽象工廠類

class

abstractfactory

;//具體工廠類

不同的球類工廠生產不同的球類。

factorymethod

///定義抽象產品類

class

abstractballproduct

;

///三個具體產品類

///具體產品類basketball

class

basketball

:public abstractballproduct

;void

productname

() override

void

productintroduction

() override};

///具體產品類football

class

football

:public abstractballproduct

;void

productname

() override

void

productintroduction

() override};

///具體產品類volleyball

class

volleyball

:public abstractballproduct

;void

productname

() override

void

productintroduction

() override

};

/// 定義抽象工廠類

class

abstractfactory

;

///三個具體工廠類

///具體工廠類 只生產單一產品

class

basketballfactory

:public abstractfactory

; abstractballproduct *

createproduct

() override};

///具體工廠類 只生產單一產品

class

footballfactory

:public abstractfactory

; abstractballproduct *

createproduct

() override};

///具體工廠類 只生產單一產品

個人能力有限,如有錯誤之處或者其他建議,敬請告知歡迎**,謝謝!

工廠方法模式 C 設計模式之1 工廠方法模式

工廠方法模式屬於建立型模式,定義乙個建立物件的介面,讓其子類自己決定例項化哪乙個工廠類,工廠模式使其建立過程延遲到子類進行。它提供了一種建立物件的最佳方式。在工廠模式中,我們在建立物件時不會對客戶端暴露建立邏輯,僅僅是通過使用乙個共同的介面來指向新建立的物件。1 抽象工廠 creator 是工廠方法...

設計模式C 實現 工廠方法模式

工廠方法模式定義了乙個建立物件的介面,但由子類決定要例項化的類是哪乙個。工廠方法讓類把例項化推遲到子類。creator是乙個類,它實現了全部操縱產品的方法,但不實現工廠方法。creator的全部子類都必須實現工廠方法 factorymethod 以實際製造出產品。全部的產品必須實現product基類...

C 設計模式之工廠方法模式

問題描述 之前講到了c 設計模式 簡單工廠模式,由於簡單工廠模式的侷限性,比如 工廠現在能生產producta productb和productc三種產品了,此時,需要增加生產productd產品 那麼,首先是不是需要在產品列舉型別中新增新的產品型別標識,然後,修改factory類中的switch結...