您的位置:首页 > 其它

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

2017-11-28 18:06 330 查看
作用:一个对象的行为取决于它的状态, 并且它必须在运行时刻根据状态改变它的行为;

#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;
}


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息