工廠方法模式,定義乙個用於建立物件的介面,讓子類決定實力化哪乙個類。工廠方法使乙個類的例項化延遲到其子類。其uml圖如下:
這裡要區分一下工廠方法模式與簡單工廠模式的區別。簡單工廠模式需要在工廠類中判斷要生產什麼型別的物件。工廠方法模式則把這部分工作交給了客戶端。每一種類物件都有自己的工廠,客戶端根據自己的不同需要生成不同工廠,然後在生產自己需要的物件。工廠方法模式相對簡單工廠模式來說降低了類與客戶端的耦合度。最重要的一點是當需要新增其他的類的時候不用修改原來的**。只需用新增響應的工廠就行了和類就行了。這樣做遵循了開放-封閉原則。而簡單工廠模式實際是破壞了開放-封閉原則。
其**如下:
// factorymethodmodel.h檔案
#pragma once
#include
// 操作類
template
<
typename t>
class
operation
virtual t getresult()
=0;protected
: t lpa, rpa;};
//加法操作
template
<
typename t>
class
addoperation
:public operation
virtual t getresult()
};// 減法操作
template
<
typename t>
class
suboperation
:public operation
virtual t getresult()
};// 乘法操作
template
<
typename t>
class
muloperation
:public operation
virtual t getresult()
};// 除法操作
template
<
typename t>
class
divoperation
:public operation
virtual t getresult()
return
this
->lpa /
this
->rpa;}}
;// 工廠類
template
<
typename t>
class
factory
;// 加法工廠
template
<
typename t>
class
addfactory
:public factory};
// 減法工廠
template
<
typename t>
class
subfactory
:public factory};
// 乘法工廠
template
<
typename t>
class
mulfactory
:public factory};
// 除法工廠
template
<
typename t>
class
divfactory
:public factory
};
測是**如下:
#include
#include
"factorymethodmodel.h"
intmain()
測試結果如下圖:
工廠方法模式 C 設計模式之1 工廠方法模式
工廠方法模式屬於建立型模式,定義乙個建立物件的介面,讓其子類自己決定例項化哪乙個工廠類,工廠模式使其建立過程延遲到子類進行。它提供了一種建立物件的最佳方式。在工廠模式中,我們在建立物件時不會對客戶端暴露建立邏輯,僅僅是通過使用乙個共同的介面來指向新建立的物件。1 抽象工廠 creator 是工廠方法...
C 設計模式之工廠方法模式
問題描述 之前講到了c 設計模式 簡單工廠模式,由於簡單工廠模式的侷限性,比如 工廠現在能生產producta productb和productc三種產品了,此時,需要增加生產productd產品 那麼,首先是不是需要在產品列舉型別中新增新的產品型別標識,然後,修改factory類中的switch結...
C 設計模式之工廠方法模式
問題描述 之前講到了c 設計模式 簡單工廠模式,由於簡單工廠模式的侷限性,比如 工廠現在能生產producta productb和productc三種產品了,此時,需要增加生產productd產品 那麼,首先是不是需要在產品列舉型別中新增新的產品型別標識,然後,修改factory類中的switch結...