机房收费系统合作时,我们发现在上下机那儿可以用到观察者模式、状态模式和职责链模式,他们都是行为型模式,但是他们是有区别的。

观察者模式

我的博客链接:机房收费系统之观察者模式。

观察者模式:一个目标物件管理所有相依于它的观察者物件,并且在它本身的状态改变时主动发出通知。这通常透过呼叫各观察者所提供的方法来实现。

用的条件:当一个对象的改变需要同时改变其他对象的时候,而且不知道具体有多少对象有待改变时。

与状态模式不同:他有两个方面(Subject和Observer),而且一个方面依赖于另一个方面,这时用观察者模式可以将这两者封装在独立的对象中使它们各自独立地改变和复用。这里的具体Subject类可以有上机、下机和强制下机,具体的Observer是判断卡是否存在,卡余额是否足够,卡是否正在上机,增加上机记录,修改上机记录,修改卡余额。

状态模式

我的博客链接:设计模式之状态模式。

状态模式:当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类。

用的条件:一个对象的行为取决于它的状态,并且它必须在运行时刻根据状态改变它的行为。或者一个操作中含有庞大的多分支结结构,并且这些分支决定于对象的状态。或当控制一个对象状态的条件表达式过于复杂时的情况。

与观察者模式的不同:他把状态的判断逻辑转移到表示不同状态的一系列类中,可以把复杂的判断逻辑简化。具体的State是判断卡是否存在,卡余额是否足够,卡是否正在上机,增加上机记录。

状态模式之观察者和状态模式相关推荐

  1. 策略模式、观察者模式、状态模式原理及实例

    策略模式 基本介绍 策略模式(Strategy Pattern)中,定义算法族,分别封装起来,让他们之间可以互相替换,此模式让算法的变化独立于使用算法的客户 这算法体现了几个设计原则. 第一 把变化的 ...

  2. 《研磨设计模式》chap18 状态模式state(2)模式介绍

    1. 状态的平行性 与策略模式的不同,策略模式的行为是平等的 2. 上下文和状态处理对象 上下文是持有状态的对象,但是上下文自身并不处理跟状态相关的行为,而是把处理状态的功能委托给了状态对应的状态处理 ...

  3. 《研磨设计模式》chap18 状态模式state(1)模式简介

    场景:投票管理 1. 正常编码 //投票管理 public class VoteManager {//记录用户投票的结果,Map<String,String>对应Map<用户名称,投 ...

  4. php 状态模式,PHP设计模式之状态模式

    状态模式从字面上其实并不是很好理解.这里的状态是什么意思呢?保存状态?那不就是备忘录模式了.其实,这里的状态是类的状态,通过改变类的某个状态,让这个类感觉像是换了一个类一样.说起来有点拗口吧,先学习概 ...

  5. java 状态设计模式_JAVA设计模式:状态模式

    转载:http://www.cnblogs.com/pony1223/p/7518226.html 一.引出状态模式 假设我们现在有一个糖果机项目,那么我们知道正常一般糖果机提供给用户的行为有这么几种 ...

  6. java设计模式之状态模式_Java中的状态设计模式

    java设计模式之状态模式 在本教程中,我们将探讨另一种流行的行为设计模式-状态设计模式. 当我们使用可以存在于多个状态的对象时,状态设计模式的知识变得非常有用. 当对象的行为取决于其当前状态时,我们 ...

  7. win7系统没有计算机睡眠状态,win7旗舰版系统休眠模式和睡眠模式的区别

    大家都知道win7旗舰版系统有休眠模式和睡眠模式,但大多人不知道具体是什么意思,更不了解电脑休眠模式和睡眠模式有什么不同,误以为作用是相同的,两者的功能以及如何唤醒电脑的方式是完全不同的.通过开始菜单 ...

  8. python的out模式_Python设计模式之状态模式

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

  9. 7、大话设计模式--状态模式 、适配器模式、备忘录模式、组合模式、迭代器模式

    第十六章:无尽加班何时休--状态模式 状态模式 :   优点: 缺点: 所使用的项目是:工作状态 功能: 界面: 设计思路: 收获: 附: 1.概述 在软件开发过程中,应用程序可能会根据不同的情况作出 ...

最新文章

  1. matlab与excel数据连接数据库,如何实现matlab与excel数据同步 数据交互?
  2. 怎么画正五边形步骤_每个药店必备三伏贴的POP海报,我教你画
  3. 学python的好处-python有什么优点
  4. 如何通过构建以太坊智能合约来销售商品
  5. java中三种常见内存溢出错误的处理方法
  6. vb 获取系统声音的电平_质量好的背景音乐系统套装效果图
  7. 利用Windows 2003系统中实现两个网段的路由
  8. 2017-3-17 SQL server 数据库 视图,事务,备份还原,分离附加
  9. 复合存储引擎的设计和实现(包含ORM和内容存储)
  10. 画图必备工具:25个常用Matplotlib图的Python代码总结
  11. 小米8 解BL锁教程 申请BootLoader解锁教程
  12. 成功真正需要什么:情商德商及体商 别高估智商
  13. 双轨制二叉树节点对象
  14. 计算机图形学复习笔记
  15. 【c++】C语言之输入行数,输出实心菱形和空心菱形
  16. ArduPilot飞控AOCODARC-H7DUAL固件编译
  17. ijkplayer点播和直播视频 问题 解决及优化,视频播放中可能有的bug
  18. Python基础-19-魔法方法(常用)
  19. Android利用Socket与硬件通信之智能家居APP
  20. 入门必学的sql语句

热门文章

  1. LY68L6400SLIT 编带
  2. PB中的timer事件
  3. 断裂韧性、冲击强度、抗弯强度——烧结钕铁硼的力学性能
  4. 我不是药神,救不了你的穷根
  5. 2022-2028年中国IDC行业投资潜力研究及发展趋势预测报告
  6. 3D Human Body Reshaping with Anthropometric Modeling 阅读翻译
  7. springboot选择题、判断题
  8. javascript中change事件的用法
  9. Influx 产品常见问题及使用技巧(3)
  10. 推荐顶级色彩网站-灵感,调色板,工具和其他色彩资源