一. 状态模式

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

实现方式1:

workstate 状态抽象类

workstate1 状态实现类1

workstate2 状态实现类2

workstate3 状态实现类3

workstate4 状态实现类4

workoperation 任务执行类

这种状态模式是比较简单的状态模式,通过任务执行类改变状态的走向,代码如下

  1. class workstate
  2. {
  3. virtual void operation() = ;
  4. };
  5.  
  6. class workstate1
  7. {
  8. virtual void operation()
  9. {
  10. cout<<"Do WorkState1"<<endl;
  11. }
  12. };
  13.  
  14. class workstate2
  15. {
  16. virtual void operation()
  17. {
  18. cout<<"Do WorkState2"<<endl;
  19. }
  20. };
  21.  
  22. class workstate3
  23. {
  24. virtual void operation()
  25. {
  26. cout<<"Do WorkState3"<<endl;
  27. }
  28. };
  29.  
  30. class workstate4
  31. {
  32. virtual void operation()
  33. {
  34. cout<<"Do WorkState4"<<endl;
  35. }
  36. };
  37.  
  38. class workoperation{
  39. workoperation(int state);
  40.  
  41. private:
  42. int m_state;
  43. void doOperation()
  44. {
  45. switch(m_state)
  46. {
  47. case :workstate *pstate = new workstate1();pstate->operation();m_state = ;break;
  48. case :workstate *pstate = new workstate2();pstate->operation();m_state = ;break;
  49. case :workstate *pstate = new workstate3();pstate->operation();m_state = ;break;
  50. case :workstate *pstate = new workstate4();pstate->operation();m_state = ;break;
  51. }
  52. }
  53. void setstate(int g_state)
  54. {
  55. m_state = g_state;
  56. }
  57. int getstate()
  58. {
  59. return m_state;
  60. }
  61. };

实现方式2:

workstate 状态抽象类

workstate1 状态实现类1

workstate2 状态实现类2

workstate3 状态实现类3

workstate4 状态实现类4

workoperation 任务执行类

这种状态模式,通过状态实现类实现任务执行类的状态变化,代码如下

  1. class workoperation;
  2. class workstate1;
  3. class workstate2;
  4. class workstate3;
  5. class workstate4;
  6.  
  7. static workstate1 m_workstate1;
  8. static workstate2 m_workstate2;
  9. static workstate3 m_workstate3;
  10. static workstate4 m_workstate4;
  11.  
  12. class workstate
  13. {
  14. virtual void operation() = ;
  15. workoperation *m_workoperation;
  16. };
  17.  
  18. class workstate1:public workstate
  19. {
  20. workstate1(workoperation *g_workoperation)
  21. {
  22. m_workoperation = g_workoperation;
  23. }
  24. virtual void operation()
  25. {
  26. cout<<"Do WorkState1"<<endl;
  27. m_workoperation::m_workstate = &m_workstate2
  28. m_workoperation->m_state();
  29. }
  30. };
  31.  
  32. class workstate2:public workstate
  33. {
  34. workstate2(workoperation *g_workoperation)
  35. {
  36. m_workoperation = g_workoperation;
  37. }
  38. virtual void operation()
  39. {
  40. cout<<"Do WorkState2"<<endl;
  41. m_workoperation::m_workstate = &m_workstate3
  42. m_workoperation->m_state();
  43. }
  44. };
  45.  
  46. class workstate3:public workstate
  47. {
  48. workstate3(workoperation *g_workoperation)
  49. {
  50. m_workoperation = g_workoperation;
  51. }
  52. virtual void operation()
  53. {
  54. cout<<"Do WorkState3"<<endl;
  55. m_workoperation::m_workstate = &m_workstate4
  56. m_workoperation->m_state();
  57. }
  58. };
  59.  
  60. class workstate4:public workstate
  61. {
  62. workstate4(workoperation *g_workoperation)
  63. {
  64. m_workoperation = g_workoperation;
  65. }
  66. virtual void operation()
  67. {
  68. cout<<"Do WorkState4"<<endl;
  69. m_workoperation::m_workstate = &m_workstate1
  70. m_workoperation->m_state();
  71. }
  72. };
  73.  
  74. class workoperation{
  75. workoperation(workstate *pstate)
  76. {
  77. m_workstate = pstate;
  78. }
  79.  
  80. private:
  81. workstate *m_workstate;
  82. int m_state;
  83. void doOperation()
  84. {
  85. m_workstate->operation();
  86. }
  87. void setstate(int g_state)
  88. {
  89. m_state = g_state;
  90. }
  91. int getstate()
  92. {
  93. return m_state;
  94. }
  95. };

 

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. jquery 自动实现autocomplete+ajax

    来公司也差不多一个半月了,一直做点小东西,现在在做公司的出货系统,也只是做来锻炼锻炼的. 好了 不废话了 下面是实现 jquery插件 autocomplete+ajax 自动实现.也是刚学,勿喷. ...

  2. 深入理解Azure自动扩展集VMSS(1)

    前文中已经详细介绍了如何配置和部署Azure的虚拟机扩展集VMSS进行自动扩展,但在实际使用过程当中,用户会出现更进一步使用的一些问题,VMSS基本扩展原理及怎么简单调试?如何进行手动扩展?怎么使用自 ...

  3. C语言读写伯克利DB 4

    因为缓存数据的buffer总是不够大(会引起段错误)索性从堆上拿了两块大内存 /* 功能说明:逐日存储来访用户(使用伯克利DB) 根据存储的用户信息确定某用户是否是首次来访用户(未被存储的伯克利DB) ...

  4. Page Controller页面控制器实现

    A Page Controller is one object or file declaration designed to handle the request for one logical w ...

  5. Thinkpad E430+CentOS 6.4+ linux-3.10.12内核网卡驱动(无线+有线)配置

    配置并编译安装内核模块和内核后,解压附件 firmware.tar.bz2,拷贝其中的rtlwifi文件夹到/lib/firmware下,然后 执行装载内核模块命令: sudo modprobe rt ...

  6. NLog 2.0.0.2000 使用实例

    原文地址:http://www.cnblogs.com/sorex/archive/2013/01/31/2887174.html ---------------------------------- ...

  7. 10招搞定web设计风格指南

    From:http://www.ui.cn/detail/27579.html 今时今日,网站的创建正变得越来越复杂,而且一般都不是一个人就能干的了的.在创建网站过程中,我们需要保证设计前后一致,并符 ...

  8. Best Cow Line (POJ 3217)

    给定长度为N的字符串S,要构造一个长度为N的字符串T,起初,T是一个空串,随后反复进行下列任意操作. *从S的头部删除一个字符,加到T的尾部 *从S的尾部删除一个字符,加到T的尾部 目标是要构造字典序 ...

  9. JAX-WS 学习二:基于WEB容器,发布WebService

    WebService 的发布通过调用 Endpoint.publish() 方法来启动一个java内嵌的WEB容器来实现的,如果要将WebService部署到一个WEB容器中去,需要使用jax-ws提 ...

  10. python urllib基础学习

    # -*- coding: utf-8 -*- # python:2.x __author__ = 'Administrator' #使用python创建一个简单的WEB客户端 import urll ...