状态模式:允许一个对象在其内部状态改变的时候改变其行为
#include <iostream>
using namespace std;
class Worker;
class State
{
public:
virtual ~State() {}
virtual void showStatus(Worker *worker) = 0;
};
class Workday : public State
{
void showStatus(Worker *worker);
};
class Restday : public State
{
void showStatus(Worker *worker);
};
class Worker
{
public:
Worker()
{
status_ = new Workday();
day_ = 1;
}
~Worker()
{
if (NULL != status_)
{
delete status_;
status_ = NULL;
}
}
void updateStatus()
{
status_->showStatus(this);
}
void setStatus(State *status)
{
if (NULL != status_)
delete status_;
status_ = status;
}
void setDay(int day)
{
day_ = day;
}
int getDay() const
{
return day_;
}
private:
State *status_;
int day_;
};
void Workday::showStatus(Worker *worker)
{
if (worker->getDay() < 6)
cout << "Today is workday" << endl;
else
{
worker->setStatus(new Restday());
worker->updateStatus();
}
}
void Restday::showStatus(Worker *worker)
{
int tmp = worker->getDay();
if (6 == tmp || 7 == tmp)
cout << "Today is restday" << endl;
else
{
worker->setStatus(new Workday());
worker->updateStatus();
}
}
int main()
{
Worker worker;
worker.updateStatus();
worker.setDay(6);
worker.updateStatus();
return 0;
}
本文介绍了一个状态模式的具体实现案例,通过定义一个工人对象在工作日和休息日的不同行为来展示状态模式的应用。此示例使用C++编程语言,并详细解释了如何根据不同条件切换对象的状态。

811

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



