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 交流信息

  • 相关阅读:
    利用DTrace实时检测MySQl
    改进MySQL Order By Rand()的低效率
    RDS for MySQL查询缓存 (Query Cache) 的设置和使用
    RDS For MySQL 字符集相关说明
    RDS for MySQL 通过 mysqlbinlog 查看 binlog 乱码
    RDS for MySQL Mysqldump 常见问题和处理
    RDS for MySQL Online DDL 使用
    RDS MySQL 表上 Metadata lock 的产生和处理
    RDS for MySQL 如何使用 Percona Toolkit
    北京已成为投融资诈骗重灾区:存好骗子公司黑名单,谨防上当!
  • 原文地址:https://www.cnblogs.com/mayZhou/p/10556315.html
Copyright © 2011-2022 走看看