让一个对象随着内部的状态改变而发生改变.

 

状态的两种切换方式:

1) 完全交给Context类切换,

2) 给Context初始化状态,其他的切换根据每一个State类进行切换,Context对象不再介入

 

  1. namespace ConsoleApplication21
  2. {
  3. class Program
  4. {
  5. static void Main(string[] args)
  6. {
  7. Context c = new Context();
  8. c.SetState(new A(c));
  9. c.Request("吃屎");
  10. c.Request("C");
  11. c.Request("B");
  12. c.Request("我在吃屎");
  13. Console.ReadLine();
  14. }
  15. }
  16.  
  17. public class Context
  18. {
  19. private State mState;
  20.  
  21. public void SetState(State state)
  22. {
  23. mState = state;
  24. }
  25.  
  26. public void Request(string value)
  27. {
  28. mState.Handle(value);
  29. }
  30. }
  31.  
  32. public class State
  33. {
  34. protected Context mContext;
  35.  
  36. public State(Context c)
  37. {
  38. mContext = c;
  39. }
  40.  
  41. public virtual void Handle(string value)
  42. {
  43. Console.WriteLine(value);
  44. }
  45. }
  46.  
  47. public class A : State
  48. {
  49. private Context c;
  50.  
  51. public A(Context c) : base(c) { }
  52.  
  53. public override void Handle(string value)
  54. {
  55. Console.WriteLine("A " + value);
  56.  
  57. if (value == "C")
  58. {
  59. mContext.SetState(new C(mContext));
  60. }
  61. }
  62. }
  63. public class B : State
  64. {
  65. public B(Context c) : base(c) { }
  66. public override void Handle(string value)
  67. {
  68. Console.WriteLine("B " + value);
  69. if (value == "A")
  70. {
  71. mContext.SetState(new A(mContext));
  72. }
  73. }
  74. }
  75. public class C : State
  76. {
  77. public C(Context c) : base(c) { }
  78. public override void Handle(string value)
  79. {
  80. Console.WriteLine("C " + value);
  81. if (value == "B")
  82. {
  83. mContext.SetState(new B(mContext));
  84. }
  85. }
  86. }
  87.  
  88. }

状态模式(State) 笔记的更多相关文章

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

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

  2. 二十四种设计模式:状态模式(State Pattern)

    状态模式(State Pattern) 介绍允许一个对象在其内部状态改变时改变它的行为.对象看起来似乎修改了它所属的类. 示例有一个Message实体类,对它的操作有Insert()和Get()方法, ...

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

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

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

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

  5. 状态模式-State Pattern(Java实现)

    状态模式-State Pattern 在状态模式(State Pattern)中,类的行为是基于它的状态改变的.当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类. State接口 ...

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

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

  7. 状态模式(State)-设计模式

    软件模式是将模式的一般概念应用于软件开发领域,即软件开发的 总体指导思路或参照样板.软件模式并非仅限于设计模式,还包括 架构模式.分析模式和过程模式等,实际上,在软件生存期的每一个阶段都存在着一些被认 ...

  8. 学习笔记——状态模式State

    状态模式,主要是用于存在大量case判断的操作执行,同时这些case依赖于对象的状态,那么就可以将大量的case判断封装为独立的类. Context: -state,当前状态对象. ChangeSta ...

  9. 设计模式 笔记 状态模式 State

    //---------------------------15/04/28---------------------------- //State  状态模式----对象行为型模式 /* 1:意图: ...

随机推荐

  1. JAVA try-catch-finally-return

      正常执行流程: try执行,遇到异常就跳到catch执行(以使得程序不会崩溃): 不管有没有异常catch,最后都执行finally   含return语句执行流程分析: 若try块中return ...

  2. WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!错误

    删除 awZ sm01]# vim .ssh/known_hosts 中不能登录主机的相关信息.

  3. JavaScript基础(一)

    JavaScript一.什么是JavaScript?脚本描述语言,网页交互特效,说白了,就是实现HTML实现不了的效果.(JavaScript是一种基于对象.事件驱动的简单脚本语言,嵌入在HTML文档 ...

  4. 使用Canvas实现下雪功能

    示例代码: <html> <head> <meta http-equiv="Content-Type" content="text/html ...

  5. oracle登陆连接的问题

    一.登陆 1.使用客户端 直接在database中配置: IP:1521/orcl 其中IP为要连接的IP 其中1521为要连接的数据库的端口 其中orcl为要连接的数据库的实例名字 2.使用命令行 ...

  6. Sql server Compact 小型数据库损坏修复

    之前碰到过小型数据库损坏打不开的问题,一直没有理会,今天生产上客户本地小库产生这样的问题,已经修复         SqlCeEngine engine = new SqlCeEngine(" ...

  7. QT5-控件-QLabel和QLCDNumber-标签显示图片或者视频,LCD用于上位机不错

    #ifndef MAINWINDOW_H #define MAINWINDOW_H #include <QMainWindow> #include <QLabel> #incl ...

  8. 【转载】经典10道c/c++语言经典笔试题(含全部所有参考答案)

    经典10道c/c++语言经典笔试题(含全部所有参考答案) 1. 下面这段代码的输出是多少(在32位机上). char *p; char *q[20]; char *m[20][20]; int (*n ...

  9. switch语句中的选择因子

    switch语句能否用作用在byte上,能否作用在long上,能否作用在String上? switch选择语句的格式为: switch(intergral-selector){ case  integ ...

  10. 通过枚举enum实现单例设计

    一.枚举 通过enum关键字来实现枚举,在枚举中需要注意的有: 1. 枚举中的属性必须放在最前面,一般使用大写字母表示 2. 枚举中可以和java类一样定义方法 3. 枚举中的构造方法必须是私有的 通 ...