Observer Pattern (观察者模式)

定义:

《设计模式》中对Observer模式的意图是这样描述的:“定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都将得到通知并且自动更新”。

The Observer Pattern defines a one-to-many relationship between a set of objects. When the state of one objects changes, all of its dependents are notified.

这个模式就好像是,报纸的发行方和报纸的订购者的关系,如下:

Publishers + Subscribers = Observer Pattern

上图中:

1.       用户1,2,3订阅了报社的报纸;

2.       报社出版新报纸后,就会给用户1,2,3邮寄新的报纸;

3.       用户3取消了报纸订购业务;

4.       报社出版新的报纸之后,依旧给用户1,2邮寄新的报纸,不会给用户3再寄报纸;

理解了publisher 和 subscribers之后,理解监听者模式就不难了。只是我们在Observer模式中,两者分别叫做 SUBJECT 和 OBSERVERS, 如下:

SUBJECT + OBSERVERS = Observer Pattern.

UML 图如下:

Observer Pattern 观察者模式相关推荐

  1. Java Observer Pattern(观察者模式)

    当对象间存在一对多关系时,则使用观察者模式(Observer Pattern).比如,当一个对象被修改时,则会自动通知它的依赖对象.观察者模式属于行为型模式. 关键代码:在抽象类里有一个 ArrayL ...

  2. 设计模式记--Observer Pattern观察者模式

    观察者模式--定义了对象之间的一对多依赖,这样一来,当一个对像改变状态时,它的所有依赖者都会收到通知并自动更新.   从定义可以看出,OBSERVER(观察者)模式逻辑上需要两组对象来实现.首先它必需 ...

  3. Design Pattern: Observer Pattern

    1. Brief 一直对Observer Pattern和Pub/Sub Pattern有所混淆,下面打算通过这两篇Blog来梳理这两种模式.若有纰漏请大家指正. 2. Use Case 首先我们来面 ...

  4. 设计模式 -行为型模式_ 观察者模式Observer Pattern 之 JDK内置的实现

    文章目录 概念 Code [主题] [观察者s] 观察者一 观察者二 [测试] 源码分析 java.util.Observable 目标类 java.util.Observer 观察者接口 notif ...

  5. 设计模式のObserver Pattern(观察者模式)----行为模式

    一.问题产生背景 又被称为订阅发布模式. 最初流传最广的一个面试题:有一只猫咪,猫咪叫了一声,老鼠跑了,老人惊醒了,男主人骂,小偷吓得不敢动了....这就产生一个问题的模型,当对象间存在一对多关系时, ...

  6. C#设计模式之十六观察者模式(Observer Pattern)【行为型】

    C#设计模式之十六观察者模式(Observer Pattern)[行为型] 原文:C#设计模式之十六观察者模式(Observer Pattern)[行为型] 一.引言 今天是2017年11月份的最后一 ...

  7. 行为型设计模式(4)—— 观察者模式(Observer Pattern)

    文章目录 1.概述 2.实例 2.1 丑陋的设计 2.2 使用观察者模式 3.应用场景 4.优缺点 5.小结 参考文献 1.概述 使用设计模式可以提高代码的可复用性.可扩充性和可维护性.观察者模式(O ...

  8. 设计模式 - 观察者模式(Observer Pattern) Java内置 用法

    观察者模式(Observer Pattern) Java内置 用法 本文地址: http://blog.csdn.net/caroline_wendy/article/details/26601659 ...

  9. HeadFirst 设计模式(二)观察者模式(Observer Pattern)

    观察者模式(Observer Pattern) 在对象之间建立一对多的依赖,这样一来,当一个对象改变状态,依赖它的对象都会收到通知,并自动更新. 设计原则 找出应用中可能需要变化之处,把它们独立出来, ...

最新文章

  1. java统计分析_数据统计(java实现)
  2. 搭建OpenStack-M版的Cinder所碰到过的状况
  3. vue 报错./lib/html5-entities.js, this relative module was not found
  4. AngularJS快速入门指南04:指令
  5. 蓝桥杯哈夫曼树java_Java实现蓝桥杯3n+1问题
  6. 记录配置faster rcnn(caffe)CPU版本遇到的问题
  7. OneNET物联网云平台HTTP数据流上传与下发,使用Fiddler调试开关应用,stm32 esp8266物联网家居远程开关
  8. 数据库服务器修改地址,数据库服务器修改地址吗
  9. day03-PyCharm的设置与使用
  10. 机器人动力学与控制学习笔记(二)————机器人动力学建模
  11. CAD的菜单栏消失,如何再次调出来
  12. SuperMap iDesktop常见问题解答集锦(九)
  13. 使用Match函数对合并单元格的行数进行统计
  14. 手机设备唤醒计算机,手机遥控电脑开机神器!局域网唤醒App
  15. PHP数据库分表查询
  16. 定时器Timer使用
  17. 华为通信基础面试题库以及答案
  18. 上海高清卫星地图 百度卫星地图(含标签、道路信息、地名等数据叠加显示)
  19. 2022 社会计算创新大赛--交通量预测
  20. linux的LCD的驱动编写

热门文章

  1. 在raspberry的jessie版系统上安装opencv3.0
  2. python+opencv选出视频中一帧再利用鼠标回调实现图像上画矩形框
  3. SQL Server数据类型
  4. NOIP2013普及组 T2 表达式求值
  5. SOAPUI请求及mockservice 使用
  6. C C++的编译过程详解
  7. [置顶]2010年东北大学ACM程序设计竞赛冬季校赛题解
  8. As3.0 一些好书连接
  9. Ubuntu18.04运行ORB_SLAM2
  10. usaco Number Triangles