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;

}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值