• 8.5 GOF设计模式四: 观察者模式Observer


    GOF设计模式四: 观察者模式Observer

       现实中遇到的问题

       当有许多不同的客户都对同一数据源感兴趣,对相同的数据有不同的处理方式,该如 何解决?
    5.1 定义: 观察者模式

       观察者模式 Observer
         定义对象之间的一对多依赖关系,当一个对象改变状态时,所 有依赖于它的对象都会自动获得通知

          Define a one-to-many dependency between objects so that when one object changes state, all

           its dependents are notified and updated automatically

    5.2 观察者模式案例

       观察者模式又叫做发布-订阅(Publish/Subscribe)模式

       模型-视图(Model/View)模式

       源-监听器(Source/Listener)模式

    6.1 Publishers + Subscribers = Observer Pattern

       Publisher == Subject 主题

       Subscribers == Observers 观察者
        主题维护一些数据

        观察者对象对主题感兴趣

        观察者已经订阅了主题数据,当数据发生变 化之后将会收到更新数据或者更新通知
        当主题数据发生变化之后 以某种方式通知观察者
        当主题数据发生变化,观察者得到通知
        这个Duck对象对主题数据不感兴趣, 当主题数据变化时不会得到通知
    6.2 观察者模式定义 Observer Pattern Defined
      The Observer Pattern defines a one-to-many dependency between objects so that when one object changes state, all of its dependents

      are notified and updated automatically

      定义对象之间的一对多依赖关系,当一个对象改变状态时,所有依赖于它的对 象都会自动获得通知
    6.3 观察者模式架构 Observer Class Diagram
      


    6.5 推模式

       推模式是当通知消息来之时,把所有相关信息都通过参数的形 式“推给”观察者
      优点:
        1.所有信息通过参数传递过来,直接、 简单,观察者可以马上进行处理
        2.观察者与被观察者没有一点联系,两 者几乎没有耦合
      缺点:
        1.所有信息都强迫推给观察者,不管有 用与否
        2.如果想添加一个参数,那就需要修改 所有观察者的接口函数
    6.6 拉模式

       当通知消息来之时,通知的函数不带任何相关的信息,而是要观 察者主动去被主题对象那里去“拉”信息
      优点:
        1.可以主动去取自己感兴趣的信息
        2.如要添加一个参数,无需修改观察者
      缺点:
        1. 观察者与被观察者有一定的联系
    6.7 How to apply 应用 Observer DP

       Check list

         主题对象只与观察者基类有耦合

          The Subject is coupled only to the Observer base class

         客户配置观察者的数量与类型

          The client configures the number and type of Observers

         Observers 首先要知道 Subject,然后把自己注册到 Subject 中

         Subject 保存所有注册过的 Observer,当状态发生变化时,广播给所有 注册过的观察者

         Subject 可以采用 “push”或者“pull”的方式,与 Observer 交流信息

  • 相关阅读:
    汇编14:端口
    汇编13:int指令
    整个软件开发的流程
    css grid 布局
    socket粘包处理
    如何做好需求变更管理?——需求变更流程规范
    软件工程需求分析文档模板
    使用layui的form.on绑定select选中事件, form.on()不执行的原因分析
    ID4收藏
    ASP.NET MVC5中View-Controller间数据的传递
  • 原文地址:https://www.cnblogs.com/mayZhou/p/10556315.html
Copyright © 2020-2023  润新知