c++设计模式之状态模式
一. 状态模式
定义:允许一个对象在其内部状态改变时改变它的行为。对象看起来似乎修改了它的类。
实现方式1:
workstate 状态抽象类
workstate1 状态实现类1
workstate2 状态实现类2
workstate3 状态实现类3
workstate4 状态实现类4
workoperation 任务执行类
这种状态模式是比较简单的状态模式,通过任务执行类改变状态的走向,代码如下
class workstate
{
virtual void operation() = ;
}; class workstate1
{
virtual void operation()
{
cout<<"Do WorkState1"<<endl;
}
}; class workstate2
{
virtual void operation()
{
cout<<"Do WorkState2"<<endl;
}
}; class workstate3
{
virtual void operation()
{
cout<<"Do WorkState3"<<endl;
}
}; class workstate4
{
virtual void operation()
{
cout<<"Do WorkState4"<<endl;
}
}; class workoperation{
workoperation(int state); private:
int m_state;
void doOperation()
{
switch(m_state)
{
case :workstate *pstate = new workstate1();pstate->operation();m_state = ;break;
case :workstate *pstate = new workstate2();pstate->operation();m_state = ;break;
case :workstate *pstate = new workstate3();pstate->operation();m_state = ;break;
case :workstate *pstate = new workstate4();pstate->operation();m_state = ;break;
}
}
void setstate(int g_state)
{
m_state = g_state;
}
int getstate()
{
return m_state;
}
};
实现方式2:
workstate 状态抽象类
workstate1 状态实现类1
workstate2 状态实现类2
workstate3 状态实现类3
workstate4 状态实现类4
workoperation 任务执行类
这种状态模式,通过状态实现类实现任务执行类的状态变化,代码如下
class workoperation;
class workstate1;
class workstate2;
class workstate3;
class workstate4; static workstate1 m_workstate1;
static workstate2 m_workstate2;
static workstate3 m_workstate3;
static workstate4 m_workstate4; class workstate
{
virtual void operation() = ;
workoperation *m_workoperation;
}; class workstate1:public workstate
{
workstate1(workoperation *g_workoperation)
{
m_workoperation = g_workoperation;
}
virtual void operation()
{
cout<<"Do WorkState1"<<endl;
m_workoperation::m_workstate = &m_workstate2
m_workoperation->m_state();
}
}; class workstate2:public workstate
{
workstate2(workoperation *g_workoperation)
{
m_workoperation = g_workoperation;
}
virtual void operation()
{
cout<<"Do WorkState2"<<endl;
m_workoperation::m_workstate = &m_workstate3
m_workoperation->m_state();
}
}; class workstate3:public workstate
{
workstate3(workoperation *g_workoperation)
{
m_workoperation = g_workoperation;
}
virtual void operation()
{
cout<<"Do WorkState3"<<endl;
m_workoperation::m_workstate = &m_workstate4
m_workoperation->m_state();
}
}; class workstate4:public workstate
{
workstate4(workoperation *g_workoperation)
{
m_workoperation = g_workoperation;
}
virtual void operation()
{
cout<<"Do WorkState4"<<endl;
m_workoperation::m_workstate = &m_workstate1
m_workoperation->m_state();
}
}; class workoperation{
workoperation(workstate *pstate)
{
m_workstate = pstate;
} private:
workstate *m_workstate;
int m_state;
void doOperation()
{
m_workstate->operation();
}
void setstate(int g_state)
{
m_state = g_state;
}
int getstate()
{
return m_state;
}
};
c++设计模式之状态模式的更多相关文章
- 【转】设计模式 ( 十七) 状态模式State(对象行为型)
设计模式 ( 十七) 状态模式State(对象行为型) 1.概述 在软件开发过程中,应用程序可能会根据不同的情况作出不同的处理.最直接的解决方案是将这些所有可能发生的情况全都考虑到.然后使用if... ...
- 设计模式 ( 十七) 状态模式State(对象行为型)
设计模式 ( 十七) 状态模式State(对象行为型) 1.概述 在软件开发过程中,应用程序可能会根据不同的情况作出不同的处理.最直接的解决方案是将这些所有可能发生的情况全都考虑到.然后使用if... ...
- 乐在其中设计模式(C#) - 状态模式(State Pattern)
原文:乐在其中设计模式(C#) - 状态模式(State Pattern) [索引页][源码下载] 乐在其中设计模式(C#) - 状态模式(State Pattern) 作者:webabcd 介绍 允 ...
- 折腾Java设计模式之状态模式
原文地址 折腾Java设计模式之状态模式 状态模式 在状态模式(State Pattern)中,类的行为是基于它的状态改变的.这种类型的设计模式属于行为型模式.在状态模式中,我们创建表示各种状态的对象 ...
- 北风设计模式课程---状态模式State(对象行为型)
北风设计模式课程---状态模式State(对象行为型) 一.总结 一句话总结: 状态模式 具体状态的行为在具体的状态类中就解决,不用交给外部做判断.实质是将多条件判断弄成了多个类,在不同的类中做判断 ...
- js设计模式——5.状态模式
js设计模式——5.状态模式 代码演示 /*js设计模式——状态模式*/ // 状态(红灯,黄灯,绿灯) class State { constructor(color) { this.color = ...
- 设计模式2——状态模式State
参考链接: 设计模式之状态模式:https://www.cnblogs.com/haoerlv/p/7777789.html 设计模式系列之状态模式:https://www.jianshu.com/p ...
- python设计模式之状态模式
python设计模式之状态模式 面向对象编程着力于在对象交互时改变它们的状态.在很多问题中,有限状态机(通常名为状态机)是一个非常方便的状态转换建模(并在必要时以数学方式形式化)工具.首先,什么是状态 ...
- Head First 设计模式 --10 状态模式
状态模式:允许对象在内部状态改变时改变他的行为,对象看起来好像修改了他的类. 用到的设计原则1.封装变化2.多用组合,少用继承3.针对接口编程,不针对实现编程4.松耦合5.对扩展开放,对修改关闭6.依 ...
- 设计模式之 -- 状态模式(State)
状态模式允许对象在内部状态改变时改变它的行为,对象看起来好像修改了它的类.当控制一个对象的状态转换条件分支语句(if...else或switch...case)过于复杂时,可以此模式将状态的判断逻辑 ...
随机推荐
- memcached真实项目中的应用
上一篇memcached介绍及基本使用介绍了memcached的一些基本概念和一个范例.这一篇将介绍一个memcached在实际项目中的应用
- No1_8.类和对象2_Java学习笔记_对象
对象 /**** * *一.对象 *1.概念:对象是由类抽象出来的,对象可以操作类的属性和方法解决问题,了解对象的创建.操作和消亡很必要: *2.对象的创建: * a. new操作符创建:每实例化一个 ...
- dynamic和object浅谈
要想知道dynamic和object的关系必须先理解它们的含义 C# 4.0提供了一个dynamic 关键字.在MSDN里是这样描述:在通过 dynamic 类型实现的操作中,该类型的作用是绕过编译时 ...
- JavaScript可否多线程? 深入理解JavaScript定时机制(转载)
说明:最近写 js 时需要用setinterval函数做定时操作,谁知道,刚开始后运行完好,但一段时间后他就抽风了,定时任务运行的时间间隔越来越短,频率加快,这是一个完全不能容忍的问题,带着一个可以出 ...
- linux下snprintf和sprinf很少被提及的区别
函数原型:int snprintf(char *dest, size_t size, const char *fmt, ...);函数说明: snprintf函数中的第二个参数,size的解释:siz ...
- ps存jpeg,格式保存的时候为什么选择“基线”
jpeg是印前和网页设计常用的格式,最大好处就是能很大程度上压缩图像大小. 在ps中将图片保存为jpeg格式的时候会出现以下选项: 其中:图像选项都很熟悉,是关于图像质量的:而格式选项的用途主要是针对 ...
- HornetQ
https://github.com/flsusp/http-queue https://github.com/sfr-network-service-platforms/hq-console htt ...
- find之exec和args
本来以为以前的差不多够用了.呵呵,看到很多高手用高技巧,心痒痒的觉得我自己还可以提升啊..哈哈哈. 这个实践起来之后,,SED,AWK也得深化一下,,,SHELL和PYTHON,作运维的两样都不能废. ...
- BZOJ 1877 晨跑
http://www.lydsy.com/JudgeOnline/problem.php?id=1877 思路:拆点费用流,答案就是最大流量和最小费用. #include<algorithm&g ...
- C++基本要点复习--------coursera程序设计实习(PKU)的lecture notes
因为一些特性复杂,很多时候也用不到一些特性,所以忘记了,算是随笔,也当作一个临时查找的手册.没有什么顺序,很杂. 1.构造函数通过函数重载的机制可以有多个(不同的构造函数,参数个数,或者参数类型不同. ...