C++設(shè)計模式之策略模式

C++設(shè)計模式之策略模式


首先,我們來看一下策略模式的定義:
策略模式是指定義一系列的算法,把它們一個個封裝起來,并且使它們可相互替換。本模式使得算法可獨立于使用它的客戶而變化。
我們再來看看類圖:

Snipaste_2018-11-13_20-28-00.png

由此我們知道,策略模式其實就是我們用一個接口,調(diào)用所有的類的入口。
從設(shè)計模式的角度來說,隔離變化,編程到接口

抽象策略角色(Strategy): 抽象策略類。
具體策略角色(ConcreteStrategy):封裝了繼續(xù)相關(guān)的算法和行為。
環(huán)境角色(Context):持有一個策略類的引用,最終給客戶端調(diào)用。
Context 指向 Strategy (由指針實現(xiàn));Context 通過 Strategy 接口,調(diào)用一系列算法;ConcreteStrategy 實現(xiàn)了一系列具體的算法

我們來用一個比較簡單明了的例子來說:
假設(shè)有一杯茶,根據(jù)茶的溫度我們可以分成熱茶、涼茶、常溫茶等等,如果我們要實現(xiàn)這個功能,我們最容易想到的方法就是if--else語句,但是這個恰恰符合了我們策略模式的使用場景。

  • Strategy:茶基類
  • ConcreteStrategy:各種茶的實現(xiàn)
  • Context:提供調(diào)用接口
    看代碼:
#include<iostream>
using namespace std;

//定義基類茶,抽象策略類
class Tea
{
public:
    virtual void temperature() = 0;
};

//熱茶、涼茶、常溫
class Hot_Tea:public Tea
{
public:
    void temperature()
    {
        cout<<"I am a hot tea"<<endl;
    }
};

class Cold_Tea:public Tea
{
public:
    void temperature()
    {
        cout<<"I am a clod tea"<<endl;
    }
};

class Normal_Tea:public Tea
{
public:
    void temperature()
    {
        cout<<"I am a normal tea"<<endl;
    }
};

//策略類引用,給客戶端調(diào)用
class Contex
{
private:
    Tea* tea;
public:
    Contex(Tea* t)
    {
        tea = t;
    }

    void point()
    {
        tea->temperature();
    }

};


int main()
{
    Contex* hot = new Contex(new Hot_Tea);
    Contex* col = new Contex(new Cold_Tea);
    Contex* nor = new Contex(new Normal_Tea);

    hot->point();
    col->point();
    nor->point();
    return 0;
}

結(jié)果:

I am a hot tea
I am a clod tea
I am a normal tea

總結(jié):我們會發(fā)現(xiàn)一件事,我們?nèi)绻砑硬璧钠渌奉惖臅r候,只要寫一個子類就可以,不需要改變其他類的代碼,所以其他的類都是穩(wěn)定的,這就體現(xiàn)了我們策略模式的設(shè)計原則和目的。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 昨天在讀書會上聽到枝芳姐說到安琪奶奶突然去世的消息,我竟一時說不出話來,鼻子酸酸的,眼淚在眼眶里打轉(zhuǎn)。 在我心里...
    a天下無雙a閱讀 333評論 1 3
  • 以前在爸媽身邊不覺的孤單,現(xiàn)在到外地來發(fā)展了心里莫名的孤單起來了,有些時候特別想爸媽,想的心里那個難受,真不是滋味...
    想念也是幸福閱讀 319評論 0 0
  • 一直想要自己寫下一本小說,給自己做一份紀念。 不是玄幻的上天入地,弒神滅魔,不是特種兵王游戲都市,只是寫一寫這短短...
    還去愛閱讀 239評論 0 0

友情鏈接更多精彩內(nèi)容