23种设计模式之状态模式(行为型,9 State,c++实现)

23种设计模式之状态模式(行为型,9 State,c++实现)

23种设计模式之状态模式(行为型,9 State,c++实现)

23种设计模式之状态模式(行为型,9 State,c++实现)

#include <iostream>

#include <string>


using namespace std;


class Worker;


class State

{

public:

virtual void doSomething(Worker* worker) = 0;

};


class Worker

{

public:

Worker();


void doSomething()

{

currentState->doSomething(this);

}

void setHour(int hour)

{

this->hour = hour;

}


int getHour()

{

return this->hour;

}


void setCurrentState(State* state)

{

this->currentState = state;

}


State* getCurrentState()

{

return currentState;

}


private:

int hour;

State* currentState;

};


class StateWork : public State

{

public:

virtual void doSomething(Worker* worker);

};


class StateBreakfast : public State

{

public:

virtual void doSomething(Worker* worker);

};



void StateBreakfast::doSomething(Worker* worker)

{

if (worker->getHour() >= 8 && worker->getHour() < 9)

{

cout << "eat breakfast" << endl;

}

else if (worker->getHour() >= 9 && worker->getHour() < 11)

{

delete worker->getCurrentState();

worker->setCurrentState(new StateWork());

worker->getCurrentState()->doSomething(worker);

}

}



void StateWork :: doSomething(Worker* worker)

{

if (worker->getHour() >= 9 && worker->getHour() < 11)

{

cout << "work" << endl;

}

else if (worker->getHour() >= 8 && worker->getHour() < 9)

{

delete worker->getCurrentState();

worker->setCurrentState(new StateBreakfast);

worker->getCurrentState()->doSomething(worker);

}

}


Worker::Worker()

{

setCurrentState(new StateBreakfast);

}


void main()

{

Worker* worker = new Worker();


worker->setHour(8);

worker->doSomething();


worker->setHour(10);

worker->doSomething();


delete worker;

}