状态模式
来源:互联网 发布:怎么通过关键字查域名 编辑:程序博客网 时间:2024/06/06 00:53
状态模式,当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类。
状态模式主要解决的是当控制一个对象状态转换的条件表达式过于复杂时的情况。把状态的判断逻辑转移到表示不同状态的一系列类当中,可以把复杂的判断逻辑简化。
适用场景:
- 一个对象的行为取决于他的状态,并且它必须在运行时刻根据状态改变他的行为。
- 一个操作中含有庞大的多分支结构,并且这些分支决定于对象的状态。
代码实例结构图:
代码:
//Status.h
#include "stdafx.h"#include <iostream>using 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
// 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;}
0 0
- 状态模式(状态变化)
- 状态模式
- 状态模式
- 状态模式
- 状态模式
- 状态模式
- 状态模式
- 状态模式
- 状态模式
- 状态模式
- 状态模式
- 状态模式
- 状态模式
- 状态模式
- 状态模式
- 状态模式
- 状态模式
- 状态模式
- 使用ab进行页面的压力测试
- java 代理(proxy)模式
- 轻松搭建一个Windows SVN服务器
- (4)鼠标移动某个区域时候显示内容,移出某个区域的时候隐藏某个内容
- UIImagePickerController
- 状态模式
- quartz在集群环境下的解决方案
- struts2 Action接收参数的方法
- 对文本框的输入限制
- 关于keil 51单片机编程文图
- 内建函数-zip
- Java 8 特性 – 终极手册
- 黑马程序员学习笔记_OC之@property和@synthesize
- java50题----14第几天