网站大量收购闲置独家精品文档,联系QQ:2885784924

第七行为型设计模式精要.ppt

  1. 1、本文档共189页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
* 将一个类的基本部分抽取出来放到一个基类中,这样它就不必重复出现在几个派生类里. ABC三个方法具有离散的特点;分别调用 有没有想过ABC的执行具有一定的顺序,前后的关联? ABC三个方法具有离散的特点;分别调用 有没有想过ABC的执行具有一定的顺序,前后的关联? ABC三个方法具有离散的特点;分别调用 有没有想过ABC的执行具有一定的顺序,前后的关联? ABC三个方法具有离散的特点;分别调用 有没有想过ABC的执行具有一定的顺序,前后的关联? * 基本方法:军训,上课,毕业设计,授予学位 模板方法:本科生培养 * 注意观察:反向的控制结构 由教育本本科培养处实例化对象,调用清华大学本科培养处的本科生培养方法 试试:建立一个西南大学本科培养处的类,然后同样由教育部本科培养处实例化对象,然后调用西南大学本科培养处的本科培养方法 比较 * 比较迭代子模式与组合模式的区别? 重点观察集合的特点! 聚合类与迭代类 并列定义 * 红字部分就是内禀的要点,即ConcreteIterator是在ConcreteAggregate内部定义的, ConcreteIterator实例可以访问ConcreteAggregate中的objs * * Changestate操作附属于context类 难点在于 状态类完成操作后应自动切换状态,也就是应该由状态类来完成状态切换,但是状态类是context类的一个成员,他能不能将自己更换掉呢? Changestate操作附属于context类 难点在于 状态类完成操作后应自动切换状态,也就是应该由状态类来完成状态切换,但是状态类是context类的一个成员,他能不能将自己更换掉呢?解决方法就是将state类作为context类的友元,是的state类能调用changestate() 为兼容性考虑 为兼容性考虑 * 状态模式也可以由内部成员变量表示状态,然后由条件分支语句根据状态选择行为! Tcpstate友元可访问tcpconnection的changestate私有操作 * 每个状态实例都具有唯一的状态和操作,故改变状态实例,即完成了根据条件转移状态的目的,也就不需要条件分支语句了。 将this作为参数传递给state中的操作,是因为完成操作之后,this所代表的tcpconnection可能需要改变状态 因为tcpstate是tcpconnection的友元,所以可以操作其私有的changstate操作 * 课堂练习:画出状态转换图 这个例子中将状态操作放在context类中,状态类去调用其而已 7.9.1 中介者模式的由来 上述实现代码的UML图如下: 7.9.1 中介者模式的由来 从上图可以看出,对话框中各个对象间存在着复杂的交互关系,上述的实现方式要求相互交互的对象间要保存相关的对象的引用,在自己的代码中要调用相关对象的方法。 上述的实现方法存在以下几个缺点: 一是各对象间紧密耦合【1】,每个对象的修改必然导致相关对象也要修改; 二是子类太多,比如每个不同的按钮都要生成一个不同子类,代码的复用性很差; 7.9.1 中介者模式的由来 三是交互关系分散在各个子类中,代码维护困难; 四是应对需求变化的能力差,设想以下,如果新增一个清空“目标列表框”的“Clear”按钮,需要添加和修改的代码将涉及系统的多个类。 仔细分析一下我们可以发现,导致上述问题的主要原因是各对象间存在的多对多的复杂交互关系,如果我们把这些多对多的交互关系抽象出来集中到一个对象中来处理,所有的复杂性也就被集中到单一的一个对象中。实际上后一种方法为我们引入了一种新的设计模式-中介者模式。 7.9.2 中介者模式的意图和适用性 用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。 7.9.2 中介者模式的意图和适用性 在软件构建过程中,经常会出现多个对象互相关联交互的情况,对象之间常常会维持一种复杂的引用关系。如果遇到一些需求的更改,这种直接的引用关系将面临不断的变化。 在这种情况下,我们可使用一个“中介对象”来管理对象之间的关联关系,避免相互交互的对象之间的紧耦合引用关系。从而更好地抵御变化。 7.9.3 中介者模式的结构和参与者 Mediator模式结构图 7.9.3 中介者模式的结构和参与者 Mediator(中介者) 中介者定义一个接口用于与各同事(Colleague)对象通信。 ConcreteMediator(具体中介者) 具体中介者通过协调各同事对象实现协作行为;维护每个需要协调的同事的引用。 Colleague Class(同事类) 每个同事类维护一个中介者对象的引用;每个同事对象在需要与其他的同事通信时,与中介者通信。 7.9.4 应

文档评论(0)

宝贝计划 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档