代码实例结构图:

代码: //Status.h
#include "stdafx.h" #include// StatusPattern.cppusing namespace std; class Work; class State { public: virtual ~State(){} virtual void WritePrograme(Work* work) = 0; }; class Work { private: State* Current; double Hour; bool finish = false; public: ~Work() { if (Current != NULL) delete Current; } double GetHour(){ return Hour; } void SetHour(double hour){ Hour = hour; } bool TaskFinished(){ return finish; } void SetFinish(bool f){ finish = f; } void SetState(State* s){ Current = s; } void WritePrograme() { Current->WritePrograme(this); } }; class SleepingState :public State { public: virtual void WritePrograme(Work* work) { cout << "睡觉时间" << endl; } }; class AfternoonState :public State { public: virtual void WritePrograme(Work* work) { if (work->GetHour() < 18) { cout << "下午时间" << endl; } else { work->SetState(new SleepingState()); work->WritePrograme(); } } }; class ForenoonState :public State { public: virtual void WritePrograme(Work* work) { if (work->GetHour() < 12) { cout << "上午时间" << endl; } else { work->SetState(new AfternoonState()); work->WritePrograme(); } } };
// StatusPattern.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include "Status.h"
int _tmain(int argc, _TCHAR* argv[])
{
Work* work = new Work();
work->SetState(new ForenoonState());
work->SetHour(10);
work->WritePrograme();
work->SetHour(20);
work->WritePrograme();
getchar();
return 0;
}