我对观察者模式的理解

观察者模式

观察者模式简单理解就是,有一方有新动作,另一方也会跟着响应作出改变,比如你点击了一个关闭按钮,跟关闭按钮相关的窗体或者是页面或者其他东西会有响应,比如窗体关闭了,页面关闭了。观察者模式就是建立这个按钮跟这个窗体进行联系的方法。观察者模式也可以称为发布--订阅模式,在发布、订阅模式里,发布方是被观察者,订约方是观察者。有的资料也把被观察者称作subject(主题)。

以下是错误理解!!!
以前我很容易混淆的概念就是,观察者是干什么的,按照现实中的理解,他不是主动去观察别人吗,比如小明是观察者,小明去观察正在学骑车的儿子,小明观察到他儿子做的不对,就通知他儿子该怎么做,然后小明儿子对小明的通知做出响应。
放到发布–订阅模式里就是:发布方去观察订阅方,这里的观察只是为了要通知订阅方,A,B,C向发布方订阅,于是发布方观察了A,B,C,发布方一旦有新的材料发布,发布方就通知他们,然后订阅方们收到通知后就做出相关响应。也就是说,发布方是观察者,订阅方是被观察者。

正确思路刚好相反
发布方是被观察者,订阅方是观察者,被观察者要干嘛呢,观察者又要干嘛呢,他们是如何联系起来的呢,也就是说如何“发送”通知呢,让响应发生呢?
被观察者要干嘛:
1.添加观察者,不是观察者主动去观察被观察者,是被观察者想要被那位观察者观察,然后就让谁观察,用发布订阅的模式说,就是发布方想让哪几个订阅方订阅,就让哪几个订阅方订阅,被观察者维护一个观察者数组,数组里面装着他的观察者们,比如发布方维护一个订阅方数组,【小甲,小乙,小丁】,就是这三人向发布方订阅了,现在小丙也想订阅,于是发布方调用 他的方法把小丙添加到数组里,发布方.add(小丙),现在发布方就有四个订阅者了,就是【小甲,小乙,小丁,小丙】。
2.通知观察者,把他维护的数组里的订阅者一个个全都通知。
观察者要干嘛:
观察者一般情况下啥也不用干,他有一个响应方法(虽然被称作观察者,但他什么也不用观察,这里的观察顶多是指让被观察者把自己放到被观察者的数组里,之前我还以为他必须时时刻刻观察被观察者呢。。),就等着被通知,被通知后执行自己的响应方法。
如何通知让被观察者与观察者联系起来,如何通知以及响应:
其实就是被观察者发生了某事后,去调用观察者的方法,“调用”就把通知跟响应两个过程一起包办了,我调用你就是我通知你,调用你的响应方法就是你的响应。比如
被观察者.doSomething() {
xxx
xxx
观察者.自己的方法();
}

  为什么被观察者能调用观察者的方法呢,因为他维护的数组里有观察者呀。

我对观察者模式的理解,之前一直很乱相关推荐

  1. angualr8观察者模式_理解观察者模式——用Angular的httpClient来解释观察者

    前言 本文关键词:观察者模式. 观察者模式是什么? 观察者模式和回调函数有什么关系? 使用httpClient时,加上.subscribe有什么作用? Angular的httpClient中如何体现观 ...

  2. java设计模式 观察者模式_理解java设计模式之观察者模式

    在生活实际中,我们经常会遇到关注一个事物数据变化的情况,例如生活中的温度记录仪,当温度变化时,我们观察它温度变化的曲线,温度记录日志等.对于这一类问题,很接近java设计模式里面的"观察者模 ...

  3. NSNotification消息通知实现源码(观察者模式原理)

    先简单介绍苹果封装的消息通知,再献上根据观察者模式原理实现的源码供参考. 消息通知 对于观察者模式,苹果封装了消息通知(NSNotification)和通知中心(NSNotificationCente ...

  4. 如何理解这6种常见设计模式?

    简介:设计模式能够帮助我们优化代码结构,让代码更优雅灵活.有哪些常见的设计模式?如何合理运用?本文分享作者对工厂模式.单例模式.装饰模式.策略模式.代理模式和观察者模式的理解,介绍每种模式的模式结构. ...

  5. 作业三_C#中的观察者模式解析

    作业三_C#中的观察者模式解析 一.观察者模式的理解分析 由于之前没有接触过观察者模式,所以找了一段源码编译运行调试一下.下面是观察者模式用C#模拟实现的示意源码.该段代码模拟了观察者模式的一个运行原 ...

  6. 深入理解javascript

    深入理解JavaScript系列(1):编写高质量JavaScript代码的基本要点 深入理解JavaScript系列(2):揭秘命名函数表达式 深入理解JavaScript系列(3):全面解析Mod ...

  7. 设计模式--观察者模式

    最近看设计模式,其中谈及到观察者模式. 可以理解为被观察者对外提供注册机制,观察者可以通过插入和移除实现订阅和取消订阅消息的功能,无论观察者有没有注册, 都不会影响被观察者发布消息. 而这在mmdet ...

  8. 不好意思,观察者模式跟发布订阅模式就是不一样

    一.前言 一天,小猪佩奇去了一家西餐厅,点了一份西冷牛扒,还叫了圣女果.后来服务员上了一碟番茄:佩奇小姐,这是你的「圣女果」.佩奇猪一眼就看出了猫腻:这tm是番茄,不是圣女果啊!于是就跟服务员理论起来 ...

  9. 观察者模式在android网络监控下的运用

    github:https://github.com/shonegg/NetMonitor 一.对观察者模式的理解: 1.观察者模式,又叫发布-订阅(Publish/Subscribe)模式,定义的是对 ...

最新文章

  1. 《SharePoint Portal Server 2003 深入指南》出版预告
  2. 【十五分钟Talkshow】谈谈HTML 5及其对Web开发人员的挑战和机遇
  3. ClickHouse之集群搭建以及数据复制
  4. 模拟器不全屏_puNES 适用于 Windows 和 Linux 的开源 NES 模拟器
  5. 使用Maven搭建Struts2框架的开发环境
  6. Python爬取网易云热歌榜所有音乐及其热评
  7. linux系统 锐捷_锐捷校园网Linux客户端认证xrgsu
  8. 电脑重启桌面 计算机图标消失,电脑重启桌面图标不见了怎么办
  9. 解决本地文件上传时fakepath的问题
  10. PDF文件页面大小不一致的解决办法
  11. VBA 字典使用小结:关键字循环
  12. linux awk比较大小,linux基础只是之awk命令使用,统计最大长度
  13. CRAFT: Character Region Awareness for Text Detection ---- 论文阅读笔记
  14. 手把手带你使用ZigBee——通过爱智控制EFR32,以及 Simplicity Studio 使用过程中注意事项
  15. Oracle Instance and Database
  16. 如何实现密码的显示和隐藏?
  17. Python如何对数组求导(差分)?
  18. python读取tiff影像_科学网—利用python GDAL库读写geotiff格式的遥感影像方法 - 张伟的博文...
  19. 使用PHP和AJAX制作日历
  20. adams如何保存_ADAMS软件使用技巧【不断更新中……】

热门文章

  1. 图解C/C++中函数参数的值传递、指针传递与引用传递
  2. iOS官方Sample大全
  3. windows添加删除静态路由
  4. TikTok玩家,路在何方?
  5. 多协议标签交换中的标签指的是什么?—Vecloud微云
  6. 树莓派应用实例4:环境温湿度测量(改进)
  7. MySQL常用DDL
  8. flask(一)之路由和视图
  9. java概述与基础知识
  10. Ubuntu 12.10 安装JDK、Hadoop全过程