状态模式:允许一个对象在其内部状态改变的时候改变其行为
#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;
}