如下图,展示了State模式,此模式和Strategy模式具有一定的相似性:

在State模式中,派生类持有回指向上下文类的引用,派生类的主要功能是使用这个引用选择并调用上下文类中的方法。在Strategy模式中,不存在这样的限制以及意图,Strategy的派生类不必支持有指向上下文类的引用,并且也不需要去调用上下文类的方法。

State模式彻底地分离了状态机的逻辑和动作。动作是在Context类中实现的,而逻辑则是分布在State类的派生类中。这就可以使得二者可以非常容易的独立变化,互不影响。该方法另外一个好处就是它非常高效,基本上和嵌套的switch/case效率一样,因此,该方法具有表驱动的方法的灵活性,又具有嵌套switch/case方法的效率。

使用此模式的代价体现在两个方面,第一,State派生类的编写是比较乏味的,编写一个具有20个状态机比较麻烦。第二,逻辑分散,无法在一个地方就看到整个状态逻辑。因此,就使得代码难以维护。

转载于:https://www.cnblogs.com/Dragonpro/archive/2005/09/25/243711.html

设计模式笔记之 - State相关推荐

  1. 设计模式学习笔记——状态(State)模式框架

    设计模式学习笔记--状态(State)模式框架 @(设计模式)[设计模式, 状态模式, State] 设计模式学习笔记状态State模式框架 基本介绍 状态案例 类图 实现代码 State接口 Day ...

  2. SwiftUI学习笔记之@State, @Binding

    SwiftUI笔记之@State, @Binding 首先看一段代码 // // ContentView.swift // SwiftUIGuide // // Created by Jeans Oy ...

  3. 设计模式笔记——代理模式

    设计模式笔记--代理模式 代理模式介绍 代理模式通常是介于请求方和提供方的一个中介系统,请求方是发送请求的一方,提供方是根据请求提供相应资源的一方 Web中的代理服务器就是一个例子,客户端向代理服务器 ...

  4. Java设计模式笔记——七个结构型模式

    系列文章目录 第一章 Java设计模式笔记--七大设计原则 第二章 Java设计模式笔记--六个创建型模式 文章目录 系列文章目录 一.适配器模式 1.概念 2.类适配器 3.对象适配 4.缺省适配器 ...

  5. 软件设计师——设计模式笔记上

    软件设计师--设计模式笔记上(创造型5种) 设计模式的主要目的 设计模式的原则 1.工厂方法模式(类模式) 意图 适用性 代码实现 2.抽象工厂模式(对象模式) 意图 适用性 代码实现 3.生成器模式 ...

  6. 设计模式笔记22——状态模式(state)

    APP抽奖活动问题 请编写程序完成APP抽奖活动 具体要求如下: 1) 假如每参加一次这个活动要扣除用户50积分,中奖概率是10% 2) 奖品数量固定,抽完就不能抽奖 3) 活动有四个状态: 可以抽奖 ...

  7. 设计模式笔记(1)---开篇(文章索引)

    概念 设计模式描述了软件设计过程中某一类常见问题的一般性的解决方案. 面向对象的设计模式描述了面向对象设计过程中,在特定场景下类与相互通讯的对象之间常见的组织关系. 设计模式与面向对象 面向对象设计模 ...

  8. Asp.net设计模式笔记之一:理解设计模式

    http://www.cnblogs.com/scy251147/p/3793547.html GOF设计模式著作中的23种设计模式可以分成三组:创建型(Creational),结构型(Structu ...

  9. 设计模式21:State 状态模式(行为型模式)

    State 状态模式(行为型模式) 动机(Motivation) 在软件构建过程中,某些对象的状态如果改变,其行为也会随之而发生变化,比如文档处于只读状态,其支持的行为和读写状态的行为就可能完全不同. ...

最新文章

  1. 使用C++访问OPC Server的简单方法
  2. 5行代码可实现5倍Scikit-Learn参数调整的更快速度
  3. php文件操作基本使用方法
  4. postman发送HTTP请求自动生成MD5签名
  5. 拜登政府撤销对Tik Tok和Wechat禁令 启动对外国应用审查
  6. 计算机专业术语的通俗解释,计算机专业术语解释
  7. android ——Toolbar
  8. 特斯拉被踢出致命车祸调查组:提前披露信息,涉嫌把责任推向车主
  9. QT Designer中编辑菜单栏技巧
  10. 蝉道Bug管理工具的环境搭建
  11. 教程详解|3D环物的360物体如何在后台上传?
  12. 13-4Happy Mid-Autumn Festival
  13. python裁剪图像
  14. 腾达无线路由器dns服务器,腾达无线路由器如何设置DNS
  15. linux教程试卷_linux基础教程试卷及答案.doc
  16. 报表生成器FastReport .Net注册数据教程
  17. 通信之自相关、互相关函数
  18. python大佬的可视化工具-Bokeh
  19. 钉钉RC版H5页面调试
  20. publiccms部署步骤

热门文章

  1. C#中的==、Equal、ReferenceEqual(转载)
  2. [Openwrt 项目开发笔记]:Samba服务vsFTP服务(四)
  3. javascript 获取光标所选中的内容并插入到另一个文本框中(兼容ie和ff)
  4. (转)对微软那棵TreeView进行试用,主要是对CheckBox进行操作
  5. Windows IIS注册asp 此操作系统版本不支持此选项 错误解决方法
  6. 错误:“Cannot load JDBC driver class ‘com.mysql.jdbc.Driver”的解决方法
  7. Python 使用sys.exc_info自己捕获异常详细信息
  8. Springboot 抛出Failed to determine a suitable driver class异常原因
  9. 支付宝 APP支付(证书)方式遇到的问题和解决办法
  10. Action请求后台出现Response already commited异常解决方法