一. 状态模式

定义:允许一个对象在其内部状态改变时改变它的行为。对象看起来似乎修改了它的类。

实现方式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++设计模式之状态模式的更多相关文章

  1. 【转】设计模式 ( 十七) 状态模式State(对象行为型)

    设计模式 ( 十七) 状态模式State(对象行为型) 1.概述 在软件开发过程中,应用程序可能会根据不同的情况作出不同的处理.最直接的解决方案是将这些所有可能发生的情况全都考虑到.然后使用if... ...

  2. 设计模式 ( 十七) 状态模式State(对象行为型)

    设计模式 ( 十七) 状态模式State(对象行为型) 1.概述 在软件开发过程中,应用程序可能会根据不同的情况作出不同的处理.最直接的解决方案是将这些所有可能发生的情况全都考虑到.然后使用if... ...

  3. 乐在其中设计模式(C#) - 状态模式(State Pattern)

    原文:乐在其中设计模式(C#) - 状态模式(State Pattern) [索引页][源码下载] 乐在其中设计模式(C#) - 状态模式(State Pattern) 作者:webabcd 介绍 允 ...

  4. 折腾Java设计模式之状态模式

    原文地址 折腾Java设计模式之状态模式 状态模式 在状态模式(State Pattern)中,类的行为是基于它的状态改变的.这种类型的设计模式属于行为型模式.在状态模式中,我们创建表示各种状态的对象 ...

  5. 北风设计模式课程---状态模式State(对象行为型)

    北风设计模式课程---状态模式State(对象行为型) 一.总结 一句话总结: 状态模式 具体状态的行为在具体的状态类中就解决,不用交给外部做判断.实质是将多条件判断弄成了多个类,在不同的类中做判断 ...

  6. js设计模式——5.状态模式

    js设计模式——5.状态模式 代码演示 /*js设计模式——状态模式*/ // 状态(红灯,黄灯,绿灯) class State { constructor(color) { this.color = ...

  7. 设计模式2——状态模式State

    参考链接: 设计模式之状态模式:https://www.cnblogs.com/haoerlv/p/7777789.html 设计模式系列之状态模式:https://www.jianshu.com/p ...

  8. python设计模式之状态模式

    python设计模式之状态模式 面向对象编程着力于在对象交互时改变它们的状态.在很多问题中,有限状态机(通常名为状态机)是一个非常方便的状态转换建模(并在必要时以数学方式形式化)工具.首先,什么是状态 ...

  9. Head First 设计模式 --10 状态模式

    状态模式:允许对象在内部状态改变时改变他的行为,对象看起来好像修改了他的类. 用到的设计原则1.封装变化2.多用组合,少用继承3.针对接口编程,不针对实现编程4.松耦合5.对扩展开放,对修改关闭6.依 ...

  10. 设计模式之 -- 状态模式(State)

     状态模式允许对象在内部状态改变时改变它的行为,对象看起来好像修改了它的类.当控制一个对象的状态转换条件分支语句(if...else或switch...case)过于复杂时,可以此模式将状态的判断逻辑 ...

随机推荐

  1. jsp 、js和css

    css的一些样式 1.自动换行 .AutoNewline { Word-break: break-all;/*必须*/ width :50px;/*这里是设置多宽就进行换行 */ }

  2. UIP协议栈

    UIP协议栈笔记 http://blog.chinaunix.net/uid-23247944-id-2974928.html

  3. pubwin 客户端会员无法自助结账的排查方法

    客户端会员无法自助结账按以下方法排查:1,看客户端能不能打开web https 后台,打不开的话,在服务端打上2048证书补丁(按下面帖子操作)http://bbs.pubwin.com.cn/for ...

  4. AngularJS中的控制器示例_2

    <!doctype html> <html ng-app="myApp"> <head> <script src="C:\\Us ...

  5. scala学习笔记-类型参数中协变(+)、逆变(-)、类型上界(<:)和类型下界(>:)的使用

    转载自  fineqtbull   http://fineqtbull.iteye.com/blog/477994 有位je上的同学来短信向我问起了Scala类型参数中协变.逆变.类型上界和类型下界的 ...

  6. DB_NAME、DB_UNIQUE_NAME、SERVICE_NAME和INSTANCE_NAME等的区别

    摘自:http://space.itpub.net/7922095/viewspace-715406 搭建DG时,突然想起oracle这些为数众多的name,以下是概念整理,仅代表个人观点 DB_NA ...

  7. ajax 调用后台接口示例

    $(function(){ var _del_time_list = $("select[name='del_time_list']"); var _del_table_name ...

  8. 【转】adb push&pull bug --- Permission denied----不错

    原文网址:http://blog.csdn.net/hengkong_horse/article/details/8708076 问题背景: adb push  E:\\rrr.txt  /data/ ...

  9. 软硬结合的可穿戴式app

    可穿戴设备已经非常的火热了,各种手环.手表之类的硬件设备已经层出不穷,并且功能也已经越发强大,从简单的运动.心率追踪,到现在的血糖.心电图监测,“量化自我”的愿景似乎已经变得越来越明朗,但也正是在这样 ...

  10. HDU 5428 The Factor (素因数分解)

    题意:给出n个数,问这n个数的乘积中至少有三个因子的最小因子.若不存在这样的因子,则输出 -1: 思路:求出每个数的最小的两个素因数,然后输出其中最小的两个数的乘积. 代码: #include< ...