行为类模式包括:

  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. IBM x3850 RAID5数据恢复过程

    [raid数据恢复故障描述]    需要进行数据恢复的是北京一家公司的IBM X3850服务器,服务器挂载了5块73G SAS硬盘组成raid5磁盘阵列,4号盘为热备盘(Hot-Spare),由于未知 ...

  2. sqlilabs 1-4

    near '1' --+ ' LIMIT 0,1 ?id=999' union select 1,database(),5 --+ 当前数据库?id=999' union select 1,user( ...

  3. 格子刷油漆【动态规划问题】—NYOJ 980

    个人博客页:https://www.scriptboy.cn/198.html 出处:蓝桥杯 题目描述: X国的一段古城墙的顶端可以看成 2*N个格子组成的矩形(如下图所示),现需要把这些格子刷上保护 ...

  4. QT中的相对位置,绝对位置之间的转换(maptoglobal,mapfromglobal)

    1. 相对位置:每个Qwidget都能通过pos()获取到相对自己父类窗口的位置, 2. 绝对位置:pWidget->mapToGlobal(QPoint(0,0)) ;将当前控件的相对位置转换 ...

  5. PAT1096:Consecutive Factors

    1096. Consecutive Factors (20) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue A ...

  6. WinForm中DataGridView对XML文件的读取

    转自http://www.cnblogs.com/a1656344531/archive/2012/11/28/2792863.html c#读取XML   XML文件是一种常用的文件格式,例如Win ...

  7. selenium中的xpath定位

    一.简介 XPath 是一门在 XML 文档中查找信息的语言.XPath 用于在 XML 文档中通过元素和属性进行导航. 二.定位 2.1 利用自己的本身属性定位 //标签[文本属性和值] 下面百度的 ...

  8. 你不知道的JavaScript--Item22 Date对象全解析

    本篇主要介绍 Date 日期和时间对象的操作. 1. 介绍 1.1 说明 Date对象,是操作日期和时间的对象.Date对象对日期和时间的操作只能通过方法. 1.2 属性 无: Date对象对日期和时 ...

  9. spring MVC(十)---spring MVC整合mybatis

    spring mvc可以通过整合hibernate来实现与数据库的数据交互,也可以通过mybatis来实现,这篇文章是总结一下怎么在springmvc中整合mybatis. 首先mybatis需要用到 ...

  10. python插入记录后取得主键id的方法(cursor.lastrowid和conn.insert_id())

    #!/usr/bin/python # import MySQL module import MySQLdb # get user input name = raw_input("Pleas ...