C++设计模式设计模式 BY C++

C++ 设计模式 —— 20.状态模式

2020-01-16  本文已影响0人  JeremyYv

以下是状态模式的简单代码实现
#include <iostream>
using namespace std;

class Clock;
//时钟的状态属性
class StateForClock
{
public:
    virtual void Show(Clock* pClock) = 0;
};

//时钟类
class Clock
{
public:
    Clock(): m_pState(NULL){}
    ~Clock()
    {
        if(m_pState)
        {
            delete m_pState;
            m_pState = NULL;
        }
    }

    void SetState(StateForClock* pState)
    {
        if(!m_pState)
        {
            delete m_pState;
        }
        m_pState = pState;
    }

    void Show()
    {
        m_pState->Show(this);
    }

private:
    StateForClock* m_pState;
};


//午夜状态
class MidNightState:public StateForClock
{
public:
    virtual void Show(Clock* pClock)
    {
        cout <<"MidNight Mode" << endl;
    }
};

//上午状态
class NoonState:public StateForClock
{
public:
    virtual void Show(Clock* pClock)
    {
        cout <<"Noon Mode" << endl;
    }
};

//下午状态
class AfterNoonState:public StateForClock
{
public:
    virtual void Show(Clock* pClock)
    {
         cout <<"AfterNoon Mode" << endl;
    }
};

//晚上状态
class NightState:public StateForClock
{
public:
    virtual void Show(Clock* pClock)
    {
        cout <<"Night Mode" << endl;
    }
};
主函数中的使用
int main()
{
    Clock oClock;
    oClock.SetState(new NoonState());
    oClock.Show();

    oClock.SetState(new AfterNoonState());
    oClock.Show();

    oClock.SetState(new MidNightState());
    oClock.Show();

    return 0;
}
控制台输出结果
Noon Mode
AfterNoon Mode
MidNight Mode

如有错误,欢迎指正

上一篇 下一篇

猜你喜欢

热点阅读