设计模式(3)演示课件-精选.ppt

  1. 1、本文档共134页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
* Institute of Computer Software Nanjing University * Structure * Institute of Computer Software Nanjing University * Participants Subject(目标) 目标知道它的观察者。可以有任意多个观察者观察同一个目标。 提供注册和删除观察者对象的接口。 Observer(观察者) 为那些在目标发生改变时需获得通知的对象定义一个更新接口。 ConcreteSubject(具体目标) 将有关状态存入各ConcreteObserver对象。 当它的状态发生改变时, 向它的各个观察者发出通知。 ConcreteObserver(具体观察者) 维护一个指向ConcreteSubject对象的引用。 存储有关状态,这些状态应与目标的状态保持一致。 实现Observer的更新接口以使自身状态与目标的状态保持一致。 * Institute of Computer Software Nanjing University * Collaboration 注意:发出改变请求的Observer对象并不立即更新,而是将其推迟到它从目标得到一个通知之后。Notify不总是由目标对象调用。它也可被一个观察者或其它对象调用 Sample Code * Institute of Computer Software Nanjing University * Consequences Subject和Observers的抽象耦合:Subject只知道它有一系列的Observers,每个符合抽象的Observer类的简单接口,但是不知道具体类型 支持广播通信:Subject对象不关心到底有多少对象对自己感兴趣,其唯一责任是通知它的各观察者 缺点:一个观察者不知道其它观察者的存在,出现意外的更新时,难以捕捉错误 * Institute of Computer Software Nanjing University * Implementation 创建目标到其观察者之间的映射 观察多个目标:扩展update接口 谁触发更新 由目标对象的状态设定操作自动调用notify 客户调用notify 对已删除目标的悬挂引用:一种避免悬挂引用的方法是, 当一个目标被删除时,让它通知它的观察者将对该目标的引用复位。一般来说,不能简单地删除观察者 在发出通知前确保目标的状态自身是一致的 * Institute of Computer Software Nanjing University * Implementation 避免特定于观察者的更新协议—推/拉模型 显式地指定感兴趣的改变:比如扩展目标的注册接口,让各观察者注册为仅对特定事件感兴趣 封装复杂的更新语义,引入ChangeManager 结合目标类和观察者类:特定于语言,比如Smalltalk * Institute of Computer Software Nanjing University * Related Patterns Mediator: 通过封装复杂的更新语义, ChangeManager充当目标和观察者之间的中介者。 Singleton: ChangeManager可使用Singleton模式来保证它是唯一的并且是可全局访问的。 * Institute of Computer Software Nanjing University * Java Support for Observer Pattern The java.util package provides an Observable class and an Observer interface: * Institute of Computer Software Nanjing University * Java AWT AWT 1.0: 责任链 AWT 1.1+: DEM (Delegation Event Model) addXXXListener removeXXXListener * Institute of Computer Software Nanjing University * State Aliases:objects for states Intent 允许一个对象在其内部状态改变时改变它的行为。对象看起来似乎修改了它的类。 Motivation * Institute of Computer Software Nanjing University * Example * Institute of Computer Software Nanjing University * Applicabili

文档评论(0)

liuhan98 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档