大話設計模式04 工廠方法模式 2020 9 22

2021-10-09 16:19:33 字數 2043 閱讀 7273

之前用簡單工廠模式實現的計算器類的類圖如下:

當增加一類新的運算時,除了增加乙個新的子類,還需要修改簡單工廠類的實現,違反了開放-封閉原則。因此出現了工廠方法模式。工廠方法模式只是定義了乙個建立物件的介面,由子類去實現該介面,決定建立那個物件,相當於將物件的初始化延遲到了子類。

通過工廠方法模式實現計算器類,主要類圖如下:

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類圖 好,我們把兩張類圖放在一起來看,首先,他們有很大的不同對不對,其次,你會發現其實工廠方法模式看起來更為麻煩,那我們為...