defines a one-to-many dependency between objects so that when one object changes state, all of its dependents are notified and updated automatically.

subject内部有个observer的集合,subject内部状态发生变化,就调用observer的update接口,通知所有的observer。

observer内部有个subject的成员变量,用以注册和取消注册

优缺点:

观察者模式的效果有以下几个优点:

1.观察者模式在被观察者和观察者之间建立一个抽象的耦合。被观察者角色所知道的只是一个具体现察者聚集,每一个具体现察者都符合一个抽象观察者的接口。被观察者并不认识任何一个具体观察者,它只知道它们都有一个共同的接口。由于被观察者和观察者没有紧密地耦合在一起,因此它们可以属于不同的抽象化层次。

2.观察者模式支持广播通信。被观察者会向所有的登记过的观察者发出通知。

观察者模式有下面的一些缺点:

1.如果一个被观察者对象有很多直接和间接的观察者的话,将所有的观察者都通知到会花费很多时间。

2.如果在被观察者之间有循环依赖的话,被观察者会触发它们之间进行循环调用,导致系统崩溃。在使用观察考模式时要特别注意这一点。

3.如果对观察者的通知是通过另外的线程进行异步投递的话,系统必须保证投递是以自恰的方式进行的。

4.虽然观察者模式可以随时使观察者知道所观察的对象发生了变化,但是观察者模式没有相应的机制使观察者知道所观察的对象是怎么发生变化的。

observer pattern相关推荐

  1. Observer Pattern 观察者模式

    Observer Pattern (观察者模式) 定义: <设计模式>中对Observer模式的意图是这样描述的:"定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时, ...

  2. Observer Pattern分析

    Observer Pattern分析 观察者模式的理解. 一.对象 1.观察者Observer 2.被观察者Subject 二.动作 观察者-------(action 观察)------>被观 ...

  3. 设计模式(19)-Observer Pattern

    一. 观察者(Observer)模式 观察者模式又叫做发布-订阅(Publish/Subscribe)模式.模型-视图(Model/View)模式.源-监听器(Source/Listener)模式或从 ...

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

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

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

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

  6. Design Pattern: Observer Pattern

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

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

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

  8. 极速理解设计模式系列:2.观察者模式(Observer Pattern)

    4个角色:被观察者(Subject/目标对象接口),具体被观察者(ConcreteSubject/具体目标对象),观察者(Observer),具体观察者(ConcreteObserver)       ...

  9. 类似 Observer Pattern 的 NSNotificationCenter (实例)

    NSNotificationCenter 是 Cococa消息中心,统一管理单进程内不同线程的消息通迅,其职责只有两个:  1,提供"观查者们"对感兴趣消息的监听注册 [[NSNo ...

  10. IronPython系列:Observer Pattern及其实现

    今天看到一个关于北京地区可以查询高考的分数的新闻.想想自己当时高考的时候,没有网络.手机,加上在农村又没有报纸.每天只能苦苦等待到,受不了的时候就只能到邮局打电话确认可以不可以查分.银子是花了不少,但 ...

最新文章

  1. 单例模式——懒汉模式(C++)
  2. 不让复制是不可能的----js获取选中文字
  3. 【MySQL】基于MySQL的SQL核心语法实战演练(二)
  4. [PHP] - 逗号和点号的区别
  5. Moodle中的角色与权限控制
  6. Python环境搭建之OpenCV(转载)
  7. 前期易语言编程作品收录|赤壁盗号|
  8. Android自学视频百度网盘链接
  9. 一招搞定时间序列数据,手把手教你绘制时间序列图
  10. 微信小程序 转发功能实例讲解
  11. ORACLE 的 ADD_MONTHS函数常用来计算 上年同期
  12. 天津大学计算机学院李晨曦,【奋斗·青春】最美的不是牵手,而是携手一起读研——访保研至天津大学的情侣学霸许贤哲与李晨曦...
  13. 什么是交叉(cross-over)网线?
  14. Lecture 4 Microphone
  15. Linux内核4.14版本——SPI NOR子系统(2)——spi-nor.c分析
  16. 网络架构采用 bs/cs 混搭模式_深扒英伟达安培新架构,五大技术新招刀刀见血...
  17. html用九张图片做出九宫图,九宫切图软件 如何快速把照片做成九宫格切图
  18. BZOJ2277 [Poi2011]Strongbox 【数论】
  19. 【无标题】C语言 最简单的代码
  20. autocad2010 32位/64位免费中文版

热门文章

  1. 额外篇 | basemap(上)
  2. 额外篇 | ggplot (下)
  3. 曝鸿蒙os手表,华为Watch GT 2曝光:第一款使用鸿蒙OS的智能手表
  4. 杭州/北京/新加坡 | 蚂蚁集团数字身份团队招聘计算机视觉算法实习生
  5. 旷视研究院博士图鉴|Be that challenger
  6. 【Java基础】HashMap原理详解
  7. 2018年EC Final 校内选拔赛【解题报告】
  8. 迷宫问题让你深度理解递归(回溯)
  9. java向指定文件写入内容
  10. MyBatis——动态SQL语句——if标签和where标签复合使用