


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

本文通过C++实现了一个简单的工作流程模拟程序,采用状态模式来切换工作与休息的状态。根据设定的时间,程序会自动切换当前状态,展示不同时间段员工应该进行的工作活动。
&spm=1001.2101.3001.5002&articleId=79681937&d=1&t=3&u=cac67fc093254067a69fede9c494e1a3)
1731

被折叠的 条评论
为什么被折叠?



