1. 两个步骤

. 注册

. 通知

2. 推模型和拉模型

  • 推模型
    目标对象主动向观察者推送目标的详细信息,不管观察者是否需要,推送的信息通常是目标对象的全部或部分数据,相当于是在广播通信。
  • 拉模型
    目标对象在通知观察者的时候,只传递少量信息。如果观察者需要更具体的信息,由观察者主动到目标对象中获取,相当于是观察者从目标对象中拉数据。一般这种模型的实现中,会把目标对象自身通过update方法传递给观察者,这样在观察者需要获取数据的时候,就可以通过这个引用来获取了。

推模型是假定目标对象知道观察者需要的数据;而拉模型是目标对象不知道观察者具体需要什么数据,没有办法的情况下,干脆把自身传给观察者,让观察者自己去按需取值。
推模型可能会使得观察者对象难以复用,因为观察者定义的update方法是按需而定义的,可能无法兼顾没有考虑到的使用情况。这就意味着出现新情况的时候,就可能需要提供新的update方法,或者是干脆重新实现观察者。
而拉模型就不会造成这样的情况,因为拉模型下,update方法的参数是目标对象本身,这基本上是目标对象能传递的最大数据集合了,基本上可以适应各种情况的需要。

2.1推模型

public class NewsPaper extends Subject{public void setContent(String content) {this.content = content; notifyObservers(content);}
}public interface Observer {//被通知的方法,直接把报纸的内容推送过来 public void update(String content);
}public class Reader implements Observer{ public void update(String content) { }public class Subject { protected void notifyObservers(String content) {for(Observer reader : readers){reader.update(content);}}
}

《研磨设计模式》chap12 观察者模式observer(2)模式介绍相关推荐

  1. 设计模式:观察者模式--Observer

    一.什么是观察者模式 1.生活中的观察者模式 1.警察抓小偷 在现实生活中,警察抓小偷是一个典型的观察者模式「这以一个惯犯在街道逛街然后被抓为例子」,这里小偷就是被观察者,各个干警就是观察者,干警时时 ...

  2. 《研磨设计模式》chap12 观察者模式observer(1)模式简介

    场景:读者订杂志,订报纸,当有新的期刊和版本来了,读者怎么知道? 1. 模式介绍 public class Subject {//用来保存注册的观察者对象 private List<Observ ...

  3. java观察者模式本质_6.[研磨设计模式笔记]观察者模式

    1.定义 定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并自动更新. 2.解决问题 --订阅报纸 看起来订阅者是直接根有据打交道,但实际上,订阅者的订阅数据 ...

  4. 设计模式学习--观察者模式(Observer Pattern)

    设计模式学习--观察者模式(Oberser Pattern) 2013年5月18日 天气:热!  下午15:28  设计模式学习中 学习者:小巫 什么是观察者模式? 定义了对象之间的一对多依赖,这样一 ...

  5. 设计模式初探-观察者模式(OBSERVER)又称发布-订阅(Publish-Subscribe)依赖(Dependents)

    观察者模式(OBSERVER),又称发布-订阅(Publish-Subscribe),依赖(Dependents),通过定义对象间的一对多的依赖关系,达到当一个对象的状态发生改变时,所有依赖于它的对象 ...

  6. 锈才学设计模式之 —— 观察者模式(Observer Pattern)

    锈才学设计模式之  -- 观察者模式 观察者模式:定义对象的一对多的关系,这样当主题对象改变状态时,其它的观察者对象都会收到通知,自动更新. 说明: 在真实世界中存在很多类似的模型,比如:订报纸,找中 ...

  7. 《研磨设计模式》chap23 职责链模式chainOfResponsibility(1)模式简介

    场景:申请经费,有好几个领导审批,项目经理.部门经理.总经理,最后总会有一个人回复审批结果. 1. 正常编码 public class FeeRequest {//提交聚餐费用申请给项目经理 publ ...

  8. Android开发中常见的设计模式深入浅出——观察者模式Observer

    ##最近老大写的Android项目里用到了RxBus然后我就去百度了 让我先了解RxJava 然后RxJava又是由观察者模式的变种写的 所以打算从头学一遍!!! 观察者模式 Observer 顾名思 ...

  9. 《研磨设计模式》chap12 观察者模式observer(3)例子

    场景:不同的人收到通知处理不一样. public interface WatcherObserver {//被通知的方法 public void update(WaterQualitySubject ...

最新文章

  1. 【社工】NodeJS 应用仓库钓鱼
  2. 一气发了3个patch
  3. 【Android】关于Android控件EditText的属性InputType的一些经验
  4. DELPHI学习---结构类型
  5. C语言goto关键字—尽量少用
  6. 《T-SQL性能调优秘笈——基于SQL Server 2012 窗口函数》——1.2 使用窗口函数的解决方案简介...
  7. python多线程实现同时下载_Python实现多线程下载
  8. matlab巴特沃斯滤波器算法解释,巴特沃斯滤波器原理.doc
  9. 对达内想说的八句话!(也适合各种参加培训的人)
  10. Gstreamer- 协商(Negotiation)
  11. oracle18c静默安装教程,centos7安装Oracle18c
  12. C语言的函数讲解(一)
  13. HTML5期末大作业:动漫网站设计——斗破苍穹动漫(6页)带轮播特效 HTML+CSS+JavaScript 期末作业HTML代码 学生网页课程设计期末作业下载 web网页设计制作成品
  14. python画螺旋状图形教程_Python实现的绘制三维双螺旋线图形功能示例
  15. Reflex WMS入门系列二十五:将叉车纳入系统进行管理
  16. 创建自己的web应用--记账本(一)
  17. CF1579G - Minimal Coverage(DP,贪心,二分)
  18. 超级全面的 AI 绘画工具合集
  19. macos12系统亲测 ai2022中文版 支持m1
  20. KEITHLEY 2182A + 6220/6221 系列测试系统软件

热门文章

  1. 【报错】ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds t
  2. 未定义标识符 stringc/c++(20)_20款丰田酷路泽5700绝版现车最后促销
  3. matlab模拟gpd,如何用ARMA模型预测中国GDP
  4. Java高版本编译低版本运行_Java高版本编译低版本运行错误(ConcurrentHashMap.keySet)...
  5. DayDayUp之Job:牛客网—算法工程师—剑指offer之66道在线编程(解决思路及其代码)——1~20
  6. Database之SQLSever:SQL命令实现理解索引、规则、默认概念及其相关案例之详细攻略
  7. AI:2020年6月16日晚20点陆奇博士演讲《正视挑战把握创业创新机会》
  8. 成功解决pml.Simple derived_col_names[int(obj[‘split_feature‘])],\ IndexError: list index out of range
  9. 成功解决 keras\callbacks.py:999: UserWarning: `epsilon` argument is deprecated and will be removed, use
  10. ML之回归预测:利用九大类机器学习算法对无人驾驶汽车系统参数(2018年的data,18+2)进行回归预测值VS真实值