c++设计模式之状态模式
来源:互联网 发布:阿里云系统软件下载 编辑:程序博客网 时间:2024/06/05 00:42
/************************************************************************//* 状态模式 *//************************************************************************/#include <IOSTREAM>using namespace std;/*一个状态接口,不同的状态从该接口中继承出来,想要增加新的状态时,只需从此接口中派生出新的类即可,适合于当判断较多(多个状态切换频繁)的场合这里引入一个程序员写工程程序的例子,程序员在一天的不同时间会处于不同的状态如果程序写不完还得加班,即程序员的状态会随着时间发生改变*/class Work;/*状态接口State*/class State{public:virtual void WriteProgram(Work *w) = 0;//写程序的行为(与Work相关的行为)};//工作类class Work{private:State *current;//当前状态double hour;bool taskFinish;public:Work(){taskFinish = false;}void SetTime(double hour){this->hour = hour;}double GetTime(){return this->hour;}//设置状态void SetState(State *s){current = s;}//设置工程是否完成void SetFinish(){taskFinish = true;}bool GetFinish(){return taskFinish;}void WriteProgram(){current->WriteProgram(this);}};//下班休息状态class RestState : public State{public:void WriteProgram(Work *w){cout<<"当前时间:"<<w->GetTime()<<"点 工作完成,下班回家了"<<endl;}};//睡眠工作状态class SleepingState : public State{public:void WriteProgram(Work *w){cout<<"受不了了,"<<w->GetTime()<<"点了,先睡吧"<<endl;}};//晚上工作状态class EveningState : public State{public:void WriteProgram(Work *w){//任务完成了,可以休息了if(w->GetFinish()){w->SetState(new RestState());w->WriteProgram();}else{if(w->GetTime()<21){cout<<"当前时间:"<<w->GetTime()<<"点 加班了,疲惫至极"<<endl;}else{//找过21点w->SetState(new SleepingState());w->WriteProgram();}}}};//下午工作状态class AfternoonState : public State{public:void WriteProgram(Work *w){if(w->GetTime()<17){cout<<"当前时间:"<<w->GetTime()<<"点 状态还不错,继续努力"<<endl;}else{w->SetState(new EveningState());w->WriteProgram();}}};//中午工作状态class NoonState : public State{public:void WriteProgram(Work *w){if (w->GetTime()<13)cout<<"当前时间:"<<w->GetTime()<<"点 饿了,午饭:犯困,午休"<<endl;else{w->SetState(new AfternoonState());w->WriteProgram();}}};//上午工作状态class ForenoonState : public State{public:void WriteProgram(Work *w){if(w->GetTime()<12)cout<<"当前时间:"<<w->GetTime()<<"点 上午工作,精神百倍"<<endl;else{w->SetState(new NoonState());w->WriteProgram();}}};void main(){//紧急项目Work *emergencyProjects = new Work();emergencyProjects->SetState(new ForenoonState());emergencyProjects->SetTime(9); emergencyProjects->WriteProgram();emergencyProjects->SetTime(10);emergencyProjects->WriteProgram();emergencyProjects->SetTime(12);emergencyProjects->WriteProgram();emergencyProjects->SetTime(14);emergencyProjects->WriteProgram();//完成工作,不需要再加班了//emergencyProjects->SetFinish();emergencyProjects->SetTime(19);emergencyProjects->WriteProgram();emergencyProjects->SetTime(22);emergencyProjects->WriteProgram();}
- 设计模式之状态模式(c++)
- 设计模式之状态模式
- 设计模式之状态模式
- 设计模式之状态模式
- 设计模式之状态模式
- 设计模式之状态模式
- 设计模式之状态模式
- 设计模式之状态模式
- 设计模式之状态模式
- 设计模式之状态模式
- 设计模式之状态模式
- 设计模式之状态模式
- 设计模式之--状态模式
- 设计模式之状态模式
- 设计模式之状态模式
- 设计模式之状态模式
- 设计模式之状态模式
- 设计模式之状态模式
- 《深入理解计算机系统》(一)
- 人的一生,到底在追求甚么?
- 不定长参数函数的实现
- t7373只刷android
- poj 2942(奇圈,双连通分量,交叉染色)
- c++设计模式之状态模式
- 启程
- 双指针的作用和用法
- Java设计模式之观察者模式
- android基础(对话框风格Activity实现)
- C语言不定参数
- 数据结构&算法实践—【排序|交换排序】梳子排序
- 控件(四)——TreeView控件以SiteMapdataSource控件为数据源实现最简单的站点地图
- flex&bison 学习笔记