之前用簡單工廠模式實現的計算器類的類圖如下:
當增加一類新的運算時,除了增加乙個新的子類,還需要修改簡單工廠類的實現,違反了開放-封閉原則。因此出現了工廠方法模式。工廠方法模式只是定義了乙個建立物件的介面,由子類去實現該介面,決定建立那個物件,相當於將物件的初始化延遲到了子類。
通過工廠方法模式實現計算器類,主要類圖如下:
c++ 實現**如下:
#include
#include
#include
using
namespace std;
class
operator
;virtual
double
getresult()
=0;virtual
~operator()
;protected
:double m_val1;
double m_val2;};
class
operatoradd
:public operator
;double
getresult
() override }
;class
operatorsub
:public operator
;double
getresult
() override }
;class
operatormuti
:public operator
;double
getresult
() override }
;class
operatordev
:public operator
;double
getresult
() override
return m_val1 / m_val2;}}
;class
ioperato***ctory
virtual operator *
createoperator()
=0;~
ioperato***ctory()
;protected
:double m_ival1;
double m_ival2;};
class
operatoraddfactory
:public ioperato***ctory
operator *
createoperator
() override }
;class
operatorsubfactory
:public ioperato***ctory
operator *
createoperator
() override }
;class
operatormutifactory
:public ioperato***ctory
operator *
createoperator
() override }
;class
operatordevfactory
:public ioperato***ctory
operator *
createoperator
() override }
;int
main()
簡單工廠模式特點是將物件初始化操作交給工廠,客戶端不需要關心,但是每次新增型別時都需要修改初始化工廠,違背了開放封閉原則。採用工廠方法模式時,增加新運算時,只需要新增乙個運運算元類和工廠子類即可,符合開放封閉原則。但是,將採用那個工廠初始化物件的判斷交給了客戶端,增加了客戶端的**量,暴露了太多細節,在後續模式中將進一步優化。 大話設計模式 工廠方法模式
大話設計模式 雷鋒依然在人間 工廠方法模式 class leifeng public void wash public void buyrice 學雷鋒的大學生 class undergraduate extends leifeng 學雷鋒的社會志願者 class volunteer extends...
大話設計模式 工廠方法模式
一 工廠方法模式定義 定義乙個用於建立物件的介面,讓子類決定例項化哪乙個類。工廠方法使乙個類的例項化延遲到其子類。二 工廠方法模式結構圖 三 工廠方法模式例項 簡單工廠模式的演算法,在增加新的演算法時,除了新增加演算法類,同時還需要修改工廠類。繼續完善,在增加新的演算法時,不修改工廠類,而是單獨修改...
大話設計模式 工廠方法模式
我們先來回顧一下簡單工廠模式 這是我的關於工廠模式的部落格,裡面有乙個關於運算的例題,我們今天還是用這個例題。簡單工廠模式uml類圖 我們再來看一下工廠方法模式關於運算類的uml類圖 好,我們把兩張類圖放在一起來看,首先,他們有很大的不同對不對,其次,你會發現其實工廠方法模式看起來更為麻煩,那我們為...