《设计模式02》.ppt

  1. 1、本文档共42页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第二部分 行为型设计模式 策略模式(Strategy Pattern) 状态模式(State Pattern) 中介者模式(Mediator Pattern) 迭代器模式(Iterator Pattern) 命令模式(Command Pattern) 责任链模式(Chain of Responsibility Pattern) 观察者模式(Observer Pattern) 访问者模式(Vistor Pattern) 备忘录模式(Memento Pattern) 解释器模式(Interpreter Pattern) 模板方法模式(Template Method Pattern) 行为的变化 变化 数据表示的变化 行为的变化 行为的变化与适应 接口变化 实现的变化 静态性变化 动态性变化 交互上的变化 数据表示的变化 数据的类型、数量、可访问性、组织形式等 接口的变化 功能的增加 功能的减少(OO均不支持) 参数个数及类型的变化 可访问性的变化 等等 实现中的静态性变化 静态性变化体现 类模版的实例化 具体类的行为静态性 具体类的行为静态性 一旦具体类确定了,类的行为就确定了。即无论该类有多少个对象,各对象的行为完全一致,且在实例化时就确定了,而在运行期间不会改变。 举例: Do1的实现变化; Do2的实现变化 只有Do1的实现改变 Do1和Do2同时变化 具体类行为的动态性 可以动态改变行为的执行结果 根据: 环境上下文、当前配置文件、系统状态 客户的主观意愿,选择的策略等 交互上的变化需要 直接交互/间接交互? 依赖型交互/关联型交互? 交互的主动方和被动方? 行为模式主要针对 行为的静态性变化及适应 行为的动态性变化及适应 交互上的变化及使用 2.1 策略模式(Strategy Pattern) 举例: 一个扑克牌游戏中的玩家(Player),其行为:出牌。在其玩的过程中,若嫌电脑太笨,可能加大电脑的AI;若总是玩不过电脑,便可能选择较低难度的出牌方式。 2.1.1策略模式意图 定义多个实现或实现的一部分,并一一封装起来。 在行为的动态执行过程中,可以替换各实现。 这样,各实现可独立于使用者(客户)而变化。 2.1.2 例 2.1.3 适用性 只是行为上有差异, 差异部分可动态替换(区别于静态变化适应方式) 差异部分可能有更多的变体 实现中以多个条件语句的形式区别不同的实质行为。 2.1.4 类图结构 2.1.5 策略模式效果 封装一部分实现细节 允许在不新建上下文(Context)的情况下,改变行为。 允许相同的行为有不同的实现,而且可动态地选择并改变。 2.1.6 补充说明 比较静态、动态行为变化 可代替条件分支或case语句。 具体策略的建立与绑定 Context与Strategy间的双向关联 2.2 状态模式(State Pattern) 举例: 一个TCPConnecttion,在接到客户请求时,将根据当前自身的状态,做出不同的反应。如,在Establised、Listening、Closed状态下,对Open、Close、Acknowledge等请求会有不同的反应。 2.2.1 状态模式意图 使行为自动适应状态的改变 去掉判断状态的分支语句 2.2.2 例 2.2.3 状态模式类图 2.2.4 状态模式效果 将与行为相关的状态,单独抽象出来。 状态改变时,使用者不用判断状态再执行相应的行为。 状态的改变,可放在具体状态中实现,也可放在上下文(Context)中实现。 状态对象的创建与销毁 比较策略模式和状态模式 2.2.5 对比策略模式 一个扑克牌游戏中的玩家(Player),其行为:出牌。在其玩的过程中,若嫌电脑太笨,可能加大电脑的AI;若总是玩不过电脑,便可能选择较低难度的出牌方式。 2.3 中介者模式(Mediator Pattern) 例: 一个系统中有多种类型的多种对象相互作用,共同完成系统的功能。 2.3.1中介者模式意图 降低各类/对象间的耦合度,使得各类可独立地变化,增加复用性。 使用一个中介对象封装各对象间的交互,并集中处理交互过程。 2.3.2中介者模式类图 2.3.4 中介者模式适用性 多个对象定义良好,但通信复杂。此时相互间的依赖关系和关联关系复杂、混乱,不易理解。 一个对象关联其它很多对象,并与相互通信,导致该对象难以维护和复用。 一个行为的实现,需要其它多个类型的多个对象共同参与完成,但又不愿生成过多的子类。 2.3.5中介者模式效果 好处 将多对多的交互,改变成一对多的,易于维护和理解 降低各Colleague间的耦合度 集中处理对象间的交互和通信,不破坏对象的复用性 不足 大大增加了中介者类的复杂度 中介者类难以复用 2.3.6中介者模式的实现 中介者与同事间通

文档评论(0)

精品文库 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档