zoukankan      html  css  js  c++  java
  • 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 交流信息

  • 相关阅读:
    [面试题]去除字符串中相邻两个字符的重复
    [面试题]单向链表的倒序索引值?
    Android数据存储——文件读写操作(File)
    python操作Excel读写(使用xlrd和xlrt)
    在Ubuntu上安装qq2012客户端
    sharepoint 2010开发webpart(转)

    【Sharepoint 2007】WebPart开发、部署过程全记录(转)
    sharepoint2010最初的了解
    基于windows验证的moss2010站点登录域后还弹出对话框解决方法(转)
  • 原文地址:https://www.cnblogs.com/mayZhou/p/10556315.html
Copyright © 2011-2022 走看看