行为类模式包括:

  1. 责任链模式
  2. 命令模式
  3. 解释器模式
  4. 迭代器模式
  5. 中介者模式
  6. 备忘录模式
  7. 观察者模式
  8. 状态模式
  9. 策略模式
  10. 模板方法模式
  11. 访问者模式

行为型模式涉及到算法和对象间职责的分配

行为类模式关注如何管理对象的行为.

命令模式VS策略模式

策略模式和命令模式相似, 特别是命令模式退化时,比如无接收者(接收者非常简单或者接收者是Java的基础操作,无需专门写一个接收者), 这种情况下, 命令模式和策略模式的类图完全一样. 但是两者还是有区别的:

  1. 关注点不同. 策略模式关注的是算法替换的问题, 关注的是算法的完整性、封装性, 只有具备了这两个条件才能保证其可以自由更换
  2. 角色功能不同. 策略模式中的具体算法是负责一个 完整算法逻辑,它是不可再分的原子业务单元,一旦变更就是对算法整体的变更.而命令模式关注命令的实现, 也就是功能的实现, 命令模式中的接收者只要符合六大设计原则,完全不用关心它是否完成了一个具体逻辑,它的影响范围也 仅仅是抽象命令和具体命令, 对他的修改不会扩散到模式外的模块
  3. 使用场景不用. 策略模式适用于算法要求变换的场景, 而命令模式适用于解耦两个有紧耦合关系的对象场合或者多命令多撤销的场景

策略模式VS状态模式

策略模式和状态模式都是通过一个 Context 类封装一个具体的行为, 都提供了一个封装的方法,是高扩展性的设计模式. 但是, 策略模式封装的是不同的算法,而状态模式封装的是不同的状态. 两种模式虽然都有变换的行为, 但是两者的目标缺不同. 策略模式与状态模式不同点如下:

  1. 环境角色的职责不同. 两者都有一个Context 环境角色的类. 策略模式的环境角色只是一个委托作用,负责算法的替换; 而状态模式的环境角色不仅仅是委托行为,它还具有登记状态变化的功能,与具体的状态类协作,共同完成状态切换行为随之切换的任务
  2. 解决问题的重点不同. 策略模式旨在解决内部算法如何改变的问题, 也就是将内部算法的改变对外界的影响降低到最小; 而状态模式旨在解决内在状态的改变而引起行为改变的问题, 它的 出发点是事物的状态,封装状态 而暴露行为,一个 对象的状态改变,从外界来看就好像是行为改变.
  3. 解决问题的方法不同. 策略模式只是确保算法可以自由切换,但是什么时候用什么算法它决定不了; 而状态模式对外暴露的是行为,状态的变化一般是由环境角色和具体状态共同完成的, 也就是说状态模式封装了状态的变化而暴露了不同的行为或行为结果
  4. 应用场景不同. 策略模式的算法必须是平行的,否则就封装了一堆垃圾. 状态模式则要求有一系列状态发生变化的场景, 它要求有状态且有行为的场景.
  5. 复杂度不同. 通常策略模式比较简单, 这里简单是指结构简单,扩展比较容易,而且代码也容易阅读. 而状态模式通常比较复杂,因为它要从两个角色看到一个对象状态和行为的改变,也就是说它封装的是变化,而变化是无穷的, 因此相对来说状态模式通常都比较复杂, 涉及面很多,虽然也很容易扩展,但是一般不会进行大规模的扩张和修正

观察者模式VS责任链模式

这两个模式好像没有太多的相似性啊. 我们在观察者模式中, 一个具体的角色既可以是观察者, 也可以是被观察者, 这样就形成了一个观察者链.这与责任链模式非常相似, 都实现了事务的链条化处理. 但是他们还是有区别的, 区别如下:

  1. 链中的消息对象不同. 责任链模式基本上不改变消息对象的结构, 虽然每个节点都可以参与消费,但是它的结构不会改变, 比如从首节点传递进来一个String对象, 不会到链尾的时候成了int对象,这在责任链模式中式不可能的, 但是在观察者链中是允许的,链中传递的对象可以自由变化,只要上下级节点对传递对象了解即可,它不要求链中的消息对象不变化,只要求链中相邻两个节点的消息对象固定
  2. 上下节点的关系不同. 在责任链中, 上下节点没有关系, 都是接受同样的对象,所有传递的对象都是从链首传递过来,,上一节点是什么没有关系,只要按照自己的逻辑处理就成. 而观察者链就不同了, 它的上下级关系很亲密,下级对上级顶礼膜拜,上级对下级绝对信任,链中的任意两个相邻节点 都是一个牢固的独立团体
  3. 消息的分销渠道不同. 在责任链中,一个消息从链首传递进来后,就开始沿着链条想链尾运动, 方向是单一的,固定的; 而观察者链则不同, 由于它采用的是观察者模式,所以有非常大的灵活性,一个消息传递到链首后,具体怎么传递时不固定的,可以以广播方式传递,也可以以跳跃方式传递,这取决于处理消息的逻辑.

设计模式之行为类模式PK的更多相关文章

  1. 设计模式之创建类模式PK

    创建类模式包括: 工厂方法模式 建造者模式 抽象工厂模式 单例模式 原型模式 创建类模式能够提供对象的创建和管理职责. 其中单例模式和原型模式非常容易理解, 单例模式是要保持在内存中只有一个对象,原型 ...

  2. 设计模式之结构类模式PK

    结构类模式包括: 适配器模式 桥梁模式 组合模式 装饰模式 门面模式 享元模式 代理模式 结构类模式着重于如何建立一个软件结构 为什么叫结构类模式呢? 因为他们都是通过组合类或对象产生更大结构以适应更 ...

  3. 设计模式之行为类模式大PK

                                        行为类模式大PK 行为类模式包括责任链模式.命令模式.解释器模式.迭代器模式.中介者模式.备忘录模式.观察者模式.状态模式.策略 ...

  4. 设计模式之结构类模式大PK

                                      结构类模式大PK 结构类模式包括适配器模式.桥梁模式.组合模式.装饰模式.门面模式.享元模式和代理模式.之所以称其为结构类模式,是因 ...

  5. 设计模式之创建类模式大PK

                                        创建类模式大PK 创建类模式包括工厂方法模式.建造者模式.抽象工厂模式.单例模式和原型模式,他们能够提供对象的创建和管理职责.其 ...

  6. ZT 创建类模式总结篇

    创建类模式总结篇 分类: 设计模式 2012-03-26 09:03 7320人阅读 评论(11) 收藏 举报 编程优化设计模式任务 创建类模式主要关注对象的创建过程,将对象的创建过程进行封装,使客户 ...

  7. 设计模式 ( 十九 ) 模板方法模式Template method(类行为型)

      设计模式 ( 十九 ) 模板方法模式Template method(类行为型) 1.概述 在面向对象开发过程中,通常我们会遇到这样的一个问题:我们知道一个算法所需的关键步骤,并确定了这些步骤的执行 ...

  8. 【设计模式】 模式PK:工厂模式VS建造者模式

    1.概述 工厂方法模式注重的是整体对象的创建方法,而建造者模式注重的是部件构建的过程,旨在通过一步一步地精确构造创建出一个复杂的对象.我们举个简单例子来说明两者的差异,如要制造一个超人,如果使用工厂方 ...

  9. 【设计模式】 模式PK:包装模式群PK

    1.概述 我们讲了这么多的设计模式,大家有没有发觉在很多的模式中有些角色是不干活的?它们只是充当黔首作用,你有问题,找我,但我不处理,我让其他人处理.最典型的就是代理模式了,代理角色接收请求然后传递到 ...

随机推荐

  1. 《T-SQL查询》读书笔记Part 3.索引的基本知识

    索引优化是查询优化中最重要的一部分,索引是一种用于排序和搜索的结构,在查找数据时索引可以减少对I/O的需要:当计划中的某些元素需要或是可以利用经过排序的数据时,也会减少对排序的需要.某些方面的优化可以 ...

  2. 从 源码 谈谈 redux compose

    compose,英文意思 组成,构成. 它的作用也是通过一系列的骚操作,实现任意的.多种的.不同的功能模块的组合,用来加强组件. 看看源码 https://github.com/reactjs/red ...

  3. 部署项目到tomcat步骤参考如下 2017.7.10

    http://jingyan.baidu.com/article/a501d80c0c65baec630f5ef6.html

  4. datetime日期和时间

    datetime是Python处理日期和时间的标准库. from datetime import datetime # 获取当前时间 now = datetime.now() print(now) # ...

  5. Eclipse报错Resource '/.org.eclipse.jdt.core.external.folders/.link5' already exists.

    Eclipse查看源码出现source not found,重新Build Path选择jdk的jar包时,出现Resource '/.org.eclipse.jdt.core.external.fo ...

  6. app后端设计(4)-- 通讯的安全性

    在app的后台设计中,一个很重要的因素是考虑通讯的安全性. 因此,我们需要考虑的要点有: 1. 在app和后台,都不能保存任何用户密码的明文 2. 在app和后台通讯的过程中,怎么保证用户信息的安全性 ...

  7. vue简介

    vue的介绍 vue官网说:Vue.js(读音 /vjuː/,类似于 view) 是一套构建用户界面的渐进式框架.与其他重量级框架不同的是,Vue 采用自底向上增量开发的设计. vue的优点 1.易用 ...

  8. bash: scrapy: command not found

    一.场景 执行  pip install scrapy 后,安装成功且执行 import scrapy  成功 二.问题 在shell中执行 scrapy 返回 bash: scrapy: comma ...

  9. 有趣的toggleClass实现交替样式

    addClass和removeClass进行样式类型的修改相信比较容易学习和接受 但是用这两个方法去实现交替样式,像一些<li>列表的样式,还有同类型数据的呈现, 当然很多框架都给出了封装 ...

  10. util.go 源码阅读

        }     h := md5.New()     baseString, _ := json.Marshal(obj)     h.Write([]byte(baseString))      ...