设计模式 之 《状态模式》

#ifndef __STATE_MODEL__
#define __STATE_MODEL__

#include <iostream>
using namespace std;
/*
GOOD:当一个对象的行为取决于它的状态,并且它必须在运行时刻根据状态改变它的行为时,可考虑用到状态模式。
*/

class Work;
class ForenoonState;
class NoonState;

class State
{
public:
    virtual void writeProgram(Work* w) = 0;
};

class Work
{
private:
    State* current;
public:
    double hour;
public:
    Work();
    void setState(State* temp){ current = temp; }
    void writeProgramW(){ current->writeProgram(this); }
};

class NoonState : public State
{
public:
    virtual void writeProgram(Work* w)
    {
        cout<<"excute"<<endl;
        if(w->hour<13)
            cout<<"还不错啊"<<endl;
        else
            cout<<"不行了,还是睡觉吧"<<endl;
    }
};

class ForenoonState : public State
{
public:
    virtual void writeProgram(Work* w)
    {
        if(w->hour<12)
            cout<<"现在的精神无敌好"<<endl;
        else
        {
            w->setState(new NoonState());
            w->writeProgramW(); //注意加这句
        }
    }
};

Work::Work()
{
    current = new ForenoonState();
}


#endif //__STATE_MODEL__

/*
#include "StateModel.h"
int _tmain(int argc, _TCHAR* argv[])
{
    Work* mywork = new Work();
    mywork->hour = 9;
    mywork->writeProgramW();
    mywork->hour = 14;
    mywork->writeProgramW();

    return 0;
}
*/
原文地址:https://www.cnblogs.com/MrGreen/p/3417198.html