软件体系结构 观察者模式ppt课件_第1页
软件体系结构 观察者模式ppt课件_第2页
软件体系结构 观察者模式ppt课件_第3页
软件体系结构 观察者模式ppt课件_第4页
软件体系结构 观察者模式ppt课件_第5页
已阅读5页,还剩16页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

OBSERVER 观察者 定义对象间的一种一对多的依赖关系 当一个对象的状态发生改变时 所有依赖于它的对象都得到通知并被自动更新 2 别名依赖 Dependents 发布 订阅 Publish Subscribe 1 意图 将一个系统分割成一系列相互协作的类有一个常见的副作用 需要维护相关对象间的一致性 我们不希望为了维持一致性而使各类紧密耦合 因为这样降低了它们的可重用性 3 动机 一个表格对象和一个柱状图对象可使用不同的表示形式描述同一个应用数据对象的信息 表格对象和柱状图对象互相并不知道对方的存在 这样使你可以根据需要单独复用表格或柱状图 但在这里是它们表现的似乎互相知道 当用户改变表格中的信息时 柱状图能立即反映这一变化 反过来也是如此 这一行为意味着表格对象和棒状图对象都依赖于数据对象 因此数据对象的任何状态改变都应立即通知它们 同时也没有理由将依赖于该数据对象的对象的数目限定为两个 对相同的数据可以有任意数目的不同用户界面 Observer模式描述了如何建立这种关系 这一模式中的关键对象是目标 subject 和观察者 observer 一个目标可以有任意数目的依赖它的观察者 一旦目标的状态发生改变 所有的观察者都得到通知 作为对这个通知的响应 每个观察者都将查询目标以使其状态与目标的状态同步 一个软件系统常常要求在某一个对象的状态发生变化的时候 某些其它的对象做出相应的改变 做到这一点的设计方案有很多 但是为了使系统能够易于复用 应该选择低耦合度的设计方案 减少对象之间的耦合有利于系统的复用 但是同时设计师需要使这些低耦合度的对象之间能够维持行动的协调一致 保证高度的协作 Collaboration 观察者模式是满足这一要求的各种设计方案中最重要的一种 当一个抽象模型有两个方面 其中一个方面依赖于另一方面 将这二者封装在独立的对象中以使它们可以各自独立地改变和复用 当对一个对象的改变需要同时改变其它对象 而不知道具体有多少对象有待改变 当一个对象必须通知其它对象 而它又不能假定其它对象是谁 换言之 你不希望这些对象是紧密耦合的 4 适用性 5 结构 Subject 目标 目标知道它的观察者 可以有任意多个观察者观察同一个目标 提供注册和删除观察者对象的接口 Observer 观察者 为那些在目标发生改变时需获得通知的对象定义一个更新接口 ConcreteSubject 具体目标 将有关状态存入各ConcreteObserver对象 当它的状态发生改变时 向它的各个观察者发出通知 ConcreteObserver 具体观察者 维护一个指向ConcreteSubject对象的引用 存储有关状态 这些状态应与目标的状态保持一致 实现Observer的更新接口以使自身状态与目标的状态保持一致 6 参与者 当ConcreteSubject发生任何可能导致其观察者与其本身状态不一致的改变时 它将通知它的各个观察者 在得到一个具体目标的改变通知后 ConcreteObserver对象可向目标对象查询信息 ConcreteObserver使用这些信息以使它的状态与目标对象的状态一致 7 协作 1 目标和观察者间的抽象耦合2 支持广播通信3 意外的更新 8 效果 1 创建目标到其观察者之间的映射2 观察多个目标3 谁触发更新a 由目标对象的状态设定操作在改变目标对象的状态后自动调用Notify b 让客户负责在适当的时候调用Notify 4 对已删除目标的悬挂引用5 在发出通知前确保目标的状态自身是一致的 9 实现 6 避免特定于观察者的更新协议 推 拉模型7 显式地指定感兴趣的改变8 封装复杂的更新语义ChangeManager有三个责任 a 它将一个目标映射到它的观察者并提供一个接口来维护这个映射 这就不需要由目标来维护对其观察者的引用 反之亦然 b 它定义一个特定的更新策略 c 根据一个目标的请求 它更新所有依赖于这个目标的观察者 9 结合目标类和观察者类 abstractclassSubject FieldsprivateArrayListobservers newArrayList MethodspublicvoidAttach Observerobserver observers Add observer publicvoidDetach Observerobserver observers Remove observer publicvoidNotify foreach Observeroinobservers o Update ConcreteSubject classConcreteSubject Subject FieldsprivatestringsubjectState PropertiespublicstringSubjectState get returnsubjectState set subjectState value Observer abstractclassObserver MethodsabstractpublicvoidUpdate ConcreteObserver classConcreteObserver Observer Fieldsprivatestringname privatestringobserverState privateConcreteSubjectsubject publicConcreteObserver ConcreteSubjectsubject stringname this subject subject this name name overridepublicvoidUpdate observerState subject SubjectState Console WriteLine Observer 0 snewstateis 1 name observerState publicConcreteSubjectSubject get returnsubject set subject value publicclassClient publicstaticvoidMain string args ConfigureObserverstructureConcreteSubjects newConcreteSubject s Attach newConcr

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论