设计模式之状态模式(State)

来源:互联网 发布:oracle。sql存储表 编辑:程序博客网 时间:2024/05/22 00:37

作用:一个对象的行为取决于它的状态, 并且它必须在运行时刻根据状态改变它的行为;

#include <iostream>using namespace std;class War;class State{public:    virtual void start(War *){}    virtual void continued(War *){}    virtual void end(War *){}    virtual void currentState(War *){}};class War{public:    War(State *state):_state(state),_day(0){}    ~War(){delete _state;}    int getDay(){return _day;}    void setDay(int day){_day = day;}    void setState(State*state){_state = state;}    void getState(){_state->currentState(this);}private:    State *_state;    int _day;};class EndState : public State{public:    void end(War *)    {       cout << "war end;"<<endl;    }    void currentState(War *war) {end(war);}};class ContinuedState : public State{public:    void continued(War *war)    {        if(war->getDay() < 10)            cout << "this is " <<war->getDay()<<" day:continued war;"<<endl;        else        {            war->setState(new EndState);            war->getState();        }    }    void currentState(War *war){continued(war);}};class StartState : public State{public:    void start(War *war)    {        if(war->getDay() < 5)            cout << "this is " <<war->getDay()<<" day:start war;"<<endl;        else        {            war->setState(new ContinuedState);            war->getState();        }    }    void currentState(War *war){start(war);}};int main(){    War *war = new War(new StartState);    for(int i = 1; i < 11; ++i)    {        war->setDay(i);        war->getState();    }    delete war;    return 0;}

这里写图片描述