- 1、本文档共134页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 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
您可能关注的文档
- 烧伤病人麻醉-医学演示课件-精选.ppt
- 烧伤-护理查房-医学演示课件-精选.ppt
- 烧伤整形外科经典(大量图文讲解)-医学演示课件-精选.ppt
- 少儿英语培训开业方案演示课件-精选.ppt
- 少年正是读书时ppt演示课件-精选.ppt
- 少先队队前教育第一课 我们的队名演示课件-精选.ppt
- 少先队基础知识-PPT演示课件-精选.ppt
- 少先队基础知识-PPT-医学演示课件-精选.ppt
- 少先队基础知识和少先队礼仪演示课件-精选.ppt
- 少先队入队基本知识教育演示课件-精选.ppt
- 2024生殖健康咨询师过关检测试卷含完整答案详解【历年真题】.docx
- 2024生殖健康咨询师试题及答案详解(易错题).docx
- 2024生殖健康咨询师试卷(B卷)附答案详解.docx
- 2024生殖健康咨询师试卷及完整答案详解(全优).docx
- 2024生殖健康咨询师试卷含答案详解【巩固】.docx
- 2024生殖健康咨询师试题预测试卷及答案详解(各地真题).docx
- 2024生殖健康咨询师试题【预热题】附答案详解.docx
- 2024生殖健康咨询师自我提分评估含答案详解AB卷.docx
- 2024生殖健康咨询师自我提分评估带答案详解(培优A卷).docx
- 2024生殖健康咨询师试题(轻巧夺冠)附答案详解.docx
文档评论(0)