【24种设计模式】状态模式

来源:互联网 发布:win7系统 网络三角形 编辑:程序博客网 时间:2024/06/05 04:42

当一个对象的行为取决于它的状态,并且它必须在运行时刻根据状态改变它的行为时,可考虑用到状态模式


#include "stdafx.h"#include <iostream>using namespace std;class job;class afternoon_state;class night_state;class noon_state;class state{public:state(){}virtual ~state() {}virtual void DoJob(job* pjob) = 0;};class job{public:job();~job() {}void set_state(state* pstate) { m_pstate = pstate; }void do_job() {m_pstate->DoJob(this);}private:state* m_pstate;public:int   m_hour;};class noon_state : public state{public:noon_state() {}virtual ~noon_state() {}virtual void DoJob(job* pjob);};class afternoon_state : public state{public:afternoon_state() {}virtual ~afternoon_state() {}virtual void DoJob(job* pjob);};class night_state : public state{public:night_state() {}virtual ~night_state() {}virtual void DoJob(job* pjob);};job::job(){m_pstate = new noon_state();}void noon_state::DoJob(job* pjob){if (pjob->m_hour >= 0 && pjob->m_hour < 14){cout<<"好想睡觉,不想干活"<<endl;}else{pjob->set_state(new afternoon_state());pjob->do_job();}}void night_state::DoJob(job* pjob){if (pjob->m_hour >= 18 && pjob->m_hour < 24){cout<<"晚上啦,下班回家"<<endl;}else{pjob->set_state(new noon_state());pjob->do_job();}}void afternoon_state::DoJob(job* pjob){if (pjob->m_hour >= 14 && pjob->m_hour < 18){cout<<"下午时间,好好干活"<<endl;}else{pjob->set_state(new night_state());pjob->do_job();}}int _tmain(int argc, _TCHAR* argv[]){job  test;test.m_hour = 6;test.do_job();test.m_hour = 15;test.do_job();test.m_hour = 20;test.do_job();system("pause");return 0;}