作用:一个对象的行为取决于它的状态, 并且它必须在运行时刻根据状态改变它的行为;
#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;
}