您的位置:首页 > 其它

设计模式----状态模式 实例

2015-06-23 14:02 260 查看
代码:

#include <iostream>

using namespace std;

class Work;

/*状态接口State*/

class State

{

public:

virtual void WriteProgram(Work *w) = 0;

};

//工作类

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();

}

}

};

int 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();

return 0;

}

编译&运行结果:

ngnsvr9 [** NONE **]/home/xionghailong/demo/state $ g++ main.cpp -o main

ngnsvr9 [** NONE **]/home/xionghailong/demo/state $ ./main

当前时间:9点 上午工作,精神百倍

当前时间:10点 上午工作,精神百倍

当前时间:12点 饿了,午饭:犯困,午休

当前时间:14点 状态还不错,继续努力

当前时间:19点 加班了,疲惫至极

受不了了,22点了,先睡吧
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: