C++状态模式的用法
来源:互联网 发布:智能排班软件app 编辑:程序博客网 时间:2024/06/14 19:44
C++状态模式的用法,实际上就是运用C++的多态性去实现的,还有面向对象
#include "stdafx.h"#include<iostream> #include<string> using namespace std; ///************************************************************************///* 状态模式 *///************************************************************************//*一个状态接口,不同的状态从该接口中继承出来,想要增加新的状态时,只需从此接口中派生出新的类即可,适合于当判断较多(多个状态切换频繁)的场合这里引入一个程序员写工程程序的例子,程序员在一天的不同时间会处于不同的状态如果程序写不完还得加班,即程序员的状态会随着时间发生改变*/class Work; //一定要声明有这个类,下面有用到//*状态接口State*/class State{public://写程序的行为(与Work相关的行为)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<<endl;}};//睡眠工作状态class SleepingState : public State //继承{public:void WriteProgram(Work *w){cout<<"受不了了,"<<w->GetTime()<<"点了,先睡吧"<<endl<<endl;}};//晚上工作状态class EveningState : public State //继承{public:void WriteProgram(Work *w){//任务完成了,可以休息了if(w->GetFinish()){//void SetState(State *s) //State *s = new RestState(); w->SetState(new RestState());w->WriteProgram();}else{if(w->GetTime()<21){cout<<"当前时间:"<<w->GetTime()<<"点 加班了,疲惫至极"<<endl<<endl;}else{//找过21点//void SetState(State *s) //State *s = new SleepingState(); w->SetState(new SleepingState());w->WriteProgram();}}}};//下午工作状态class AfternoonState : public State{public:void WriteProgram(Work *w){if(w->GetTime()<17){cout<<"当前时间:"<<w->GetTime()<<"点 状态还不错,继续努力"<<endl<<endl;}else{//void SetState(State *s) //State *s = new EveningState();w->SetState(new EveningState());w->WriteProgram();}}};//中午工作状态class NoonState : public State{public:void WriteProgram(Work *w){if (w->GetTime()<13)cout<<"当前时间:"<<w->GetTime()<<"点 饿了,午饭:犯困,午休"<<endl<<endl;else{//void SetState(State *s) //State *s = new AfternoonState();w->SetState(new AfternoonState());w->WriteProgram();}}};//上午工作状态class ForenoonState : public State{public:void WriteProgram(Work *w){if(w->GetTime()<12)cout<<"当前时间:"<<w->GetTime()<<"点 上午工作,精神百倍"<<endl<<endl;else{//void SetState(State *s) //State *s = new NoonState();w->SetState(new NoonState());w->WriteProgram();}}};void main(){//紧急项目Work *emergencyProjects = new Work();//void SetState(State *s) //State *s = new ForenoonState();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();system("pause");}
0 0
- C++状态模式的用法
- 【C++】Chapter12:状态模式
- Objective C--状态模式
- Objective C 状态模式
- 【C++】状态模式
- 嵌入式设计模式:有限状态自动机的C语言实现
- C语言设计模式:状态模式
- 设计模式(1)-状态模式(C++)
- 设计模式之状态模式(c++)
- 状态模式的例子
- 状态模式的应用
- 进程的状态模式
- Android 的状态模式
- 状态模式(事物的状态)
- 状态模式实现依赖于状态的行为
- 事务的状态(状态模式)
- C语言实现状态设计模式
- C语言实现状态设计模式
- Java中泛型选择排序(升序),继承Comparable接口
- twemproxy redis ttserver phpadmin memcache
- ACRush 楼天成回忆录 (与所有ACMer共勉!!)
- 参加了华为奖学金答辩,哎。。。太紧张了,估计没多少希望了
- 怎样为内核打补丁
- C++状态模式的用法
- Java 类.this含义与.new
- DB2统计表和索引占用空间量
- 【Android】SpinnerWheel开源项目
- ubuntu开启SSH服务,并允许ROOT权限远程登录。
- Codeforces Round #283 (Div. 2) D. Tennis Game
- centos安装mysql,tomcat,jdk
- 安全卫士——Day04_2
- vc6中 EnumDisplayDevices 判断扩展屏幕,以及取得扩展屏幕的示例代码。