一、策略模式簡介
策略模式的定義一系列演算法的一種方法,這些演算法都是做相同的工作,只是實現不同。為了減少客戶端呼叫和策略演算法類的耦合性,即可使用策略模式。其主要框架如下:strategy為策略父類,有多個不同策略子類繼承於它。context類包含strategy成員,將strategy類的函式做了進一步封裝,並提供給客戶端使用。
二、例項
採用策略模式+簡單工廠模式實現乙個超市收銀時根據不同策略計算實際收取金額的類,其類圖如下:
用c++**實現如下:
#include
#include
using
namespace std;
//2.策略模式+簡單工廠模式:商場打折策略
class
cashsuper;}
;class
cashnormal
:public cashsuper};
class
cashrebate
:public cashsuper
;double
getacceptcash
(double imoney) override
private
:double m_rebate;};
class
cashreturn
:public cashsuper
;double
getacceptcash
(double imoney) override
return imoney;
}private
:double m_moneycondition;
double m_moneyreturn;};
class
cashcontext
else
if(istr ==
"打一折"
)else
if(istr ==
"滿300減100")}
~cashcontext()
}double
getacceptcash
(double imoney)
private
: cashsuper *m_pcashsuper;};
intmain()
可以看出,最後暴露給客戶使用的只有cashcontext類,所有的策略類都被隱藏了**。而直接採用簡單工廠模式,則會暴露策略類及策略工廠類兩個類,在邏輯上可以採用策略模式時,採用採用模式更佳**。
ps:簡單工廠模式是根據客戶要求不同,初始化不同的物件。策略模式是根據客戶要求不同,初始化物件的資料成員。對於客戶要求經常變動的,採用簡單工廠模式並非最佳,因為每次改動修改大,此時應該封裝「變化點」,將變化點作為乙個類的資料成員進行儲存使用,此時即為策略模式。
大話設計模式C 版本 02 策略模式
策略模式 定義了演算法家族,分別封裝起來,讓他們之間可以互相替換,此模式讓演算法的變化不會影響到用演算法的客戶。注意 與簡單工廠模式相比,使用上只需要知道 context 類即可 演算法會時常變動 用幾個類封裝了這些演算法且有共同的父類 抽象乙個演算法類class strategy 寫具體的子類cl...
大話設計模式 策略模式
前言 做事情的時候我們需要動動腦來簡化自己完成任務的負擔,這就需要講究策略了,我們會根據自己所處的環境列出所有的可能條件,再從中挑選合適的方法來完成這件事。就像我們過年回家,我們可以選擇高鐵 普通火車 還可以選擇硬座 軟座 臥鋪,這都是我們回家的策略 買不到直達的還得轉戰好幾個火車站,策略的最終到達...
大話設計模式 策略模式
前言 做事情的時候我們需要動動腦來簡化自己完成任務的負擔,這就需要講究策略了,我們會根據自己所處的環境列出所有的可能條件,再從中挑選合適的方法來完成這件事。就像我們過年回家,我們可以選擇高鐵 普通火車 還可以選擇硬座 軟座 臥鋪,這都是我們回家的策略 買不到直達的還得轉戰好幾個火車站,策略的最終到達...