更多設計模式參看: 設計模式之模式概述(模式彙總)(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結...