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

8.5 GOF设计模式四: 观察者模式Observer的更多相关文章

  1. 乐在其中设计模式(C#) - 观察者模式(Observer Pattern)

    原文:乐在其中设计模式(C#) - 观察者模式(Observer Pattern) [索引页][源码下载] 乐在其中设计模式(C#) - 观察者模式(Observer Pattern) 作者:weba ...

  2. 二十四种设计模式:观察者模式(Observer Pattern)

    观察者模式(Observer Pattern) 介绍定义对象间的一种一对多的依赖关系,以便当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并自动刷新. 示例有一个Message实体类,某些对象 ...

  3. 人人都会设计模式:观察者模式--Observer

    https://segmentfault.com/a/1190000012295887 观察者模式是抽像通知者和观察者,达到具体通知者跟具体观察者没有偶合.能达到不管是切换通知者,或者是切换观察者,都 ...

  4. [设计模式] 19 观察者模式 Observer Pattern

    在GOF的<设计模式:可复用面向对象软件的基础>一书中对观察者模式是这样说的:定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新.当一个 ...

  5. 设计模式九: 观察者模式(Observer Pattern)

    简介 观察者属于行为型模式的一种, 又叫发布-订阅模式. 如果一个对象的状态发生改变,依赖他的对象都将发生变化, 那么这种情况就适合使用观察者模式. 它包含两个术语,主题(Subject),观察者(O ...

  6. 设计模式之观察者模式(Observer)(4)

    简介 观察者模式(Observer)完美的将观察者和被观察的对象分离开.举个例子,用户界面可以作为一个观察者,业务数据是被观察者,用户界面观察业务数据的变化,发现数据变化后,就显示在界面上.面向对象设 ...

  7. c#设计模式之观察者模式(Observer Pattern)

    场景出发 一个月高风黑的晚上,突然传来了尖锐的猫叫,宁静被彻底打破,狗开始吠了,大人醒了,婴儿哭了,小偷跑了 这个过程,如果用面向对象语言来描述,简单莫过于下: public class Cat { ...

  8. JAVA设计模式之观察者模式 - Observer

    有趣的事情发生时,可千万别错过了!有一个模式可以帮你的对象知悉现况,不会错过该对象感兴趣的事.对象甚至在运行时可决定是否要继续被通知.有了观察者,你将会消息灵通. 介绍 观察者模式的定义: 在对象之间 ...

  9. 设计模式之观察者模式(Observer pattern)

    最近参加了一次面试,其中笔试题有一道编程题,在更换掉试题的描述场景后,大意如下: 上课铃声响起,学生A/B/C/D进入教室:下课铃声响起,学生A/B/C/D离开教室. 要求使用设计模式的思想完成铃与学 ...

随机推荐

  1. 使用 acme.sh 签发续签 Let‘s Encrypt 证书 泛域名证书

    1. 安装 acme.sh 安装很简单, 一个命令: curl https://get.acme.sh | sh 并创建 一个 bash 的 alias, 方便你的使用 alias acme.sh=~ ...

  2. 通过js或jq增加的代码,点击事件或其他一些事件不起作用时

    通过js或jq增加的代码,点击事件或其他一些事件不起作用时,可使用 $(document).on("click",".noshow",function() { ...

  3. 【数据结构】算法 LinkList (Merge Two Sorted Lists)

    合并2个有序链表 list A, list B, Solution: 对A,B 表按序读取数据,比较大小后插入新链表C. 由于两个输入链表的长度可能不同,所以最终会有一个链表先完成插入所有元素,则直接 ...

  4. B/S的学习

    一. B/S的概念 B/S(Brower/Server,浏览器/服务器)模式又称B/S结构,是Web兴起后的一种网络结构模式.Web浏览器是客户端最主要的应用软件. 这种模式统一了客户端,将系统功能实 ...

  5. h5页面实战——与andriod和ios的交互

    首先需要我们h5页面需要做一些匹配.比如:如何判断当前手机是andriod还是ios, andriod攻城狮和ios工程师,一般会定义事件的方法.我们套用他们方法就可以了. 那么为什么我要写这个随笔呢 ...

  6. 运输计划NOIP2015Day2T3

    运输计划 题目描述 公元 2044 年,人类进入了宇宙纪元. L 国有 n 个星球,还有 n-1 条双向航道,每条航道建立在两个星球之间,这 n-1 条 航道连通了 L 国的所有星球. 小 P 掌管一 ...

  7. BeautifulReport 实现app UI自动化测试

    修改了 BeautifulReport源码中的一些内容<附:BeautifulReport--适用于unittest自动化测试的可视化报告>; 1.生成截图时,原来的img文件夹必须在项目 ...

  8. LightGBM算法(转载)

    原文:https://blog.csdn.net/niaolianjiulin/article/details/76584785 前者的含义是轻量级,GBM:梯度上升机. 相较于xgboost: 更快 ...

  9. 湘潭邀请赛+蓝桥国赛总结暨ACM退役总结

    湘潭邀请赛已经过去三个星期,蓝桥也在上个星期结束,今天也是时候写一下总结了,这应该也是我的退役总结了~ --------------------------------湘潭邀请赛----------- ...

  10. CentOS 7离线安装CDH 5.16.1完全指南(含各种错误处理)

    安装包下载 1.CM软件包下载 从http://archive.cloudera.com/cm5/redhat/7/x86_64/cm/5.16.1/RPMS/x86_64/下载rpm包,如下: 其实 ...