观察者的前世今生

2024-05-10 03:08
文章标签 观察者 今生 前世

本文主要是介绍观察者的前世今生,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

观察者的前世今生

观察者是一个非常棒的消息通信机制模式,许多优秀的框架都使用了观察者模式的思想。

====================

观察者模式的前生

这里我想借着观察者,聊聊回调。因为这真的是一个有趣的东西。而它也正是观察者的前生。

我把回调理解为开发者的一个小进阶。为什么这么说呢?

回调解决了所有初级程序猿都会遇到棘手问题:

A → B   B → A  A调用B,B如何反过来调用A
新手通常都会使用静态变量来解决这个问题。

回调可以轻而易举的解决这个问题,但新手理解回调却是一个艰难的过程,因为这完全打破了固有的思维方式。其原因有二:

  • 接口可以理解为一种名实分离的概念。继承形象化的父子关系更容易被理解,接口就不那么容易了。因为它比较特殊,一个空空的东西……但其实将接口也认为是继承,理解起来就容易了一点。(所以回调你也可以用继承实现哦~)

  • Java的引用类似于简化版的指针,对新手也不是那么容易理解的东西。所以在回调中,就难去理解,我中有你,你中有我,你那里的我还是我这里的我吗?

难理解是真的,但真的理解了以后,在感叹的同时也会发现它还是很简单的。也对接口和JAVA的引用有了较深的理解。

观察者的优化建议

先说观察者的三种模式
  • 链式结构,一条触发链的结构。你通知我,我通知他。

  • 分发结构。通过观察者做消息或事件分发。

  • 单一回调(最简的回调也是一种观察者嘛)

优化
  • 观察者包装与分类

    传统的观察者模式,都是被观察者将观察者存于一个集合中,当需要发送消息时,通过遍历向每个观察者发消息。这是一种效率低下的行为,尤其观察者非常多的时候,可以通过一些方法将观察者分类,每次只遍历需要的一部分。

  • 异步分发。

    普通的消息分发都是按照顺序的,一旦中间有卡壳,那么后面的完蛋了。而且如果要求速度的话,建议异步分发。

  • 观察者的保存使用Set还是List

    如果有避免一个对象重复注册的需求,那么可以开始考虑使用Set,但到底用不用呢?

    Set可以更快的查重,List可以更快的遍历。

    如果注册需求大于消息分发需求,使用Set。消息分发需求大于注册需求,使用List。而往往后者的情况更多一些。

观察者的缺点

  • 死循环链与链堵塞。

    需要注意的是,被观察者也可以成为观察者,而一旦形成一链式结构,一是很容易造成死循环,二是链过长导致维护困难,调试困难。

    而在链过长的情况下,同步顺序分发中一旦中间某个节点分发错误,就造成后面的消息堵塞发不出去。链断开。

  • 观察者的取消问题。

    观察者模式最大的缺点,观察者的取消注册问题!!

    Java的引用机制与GC机制很容易导致OOM。在观察者进被观察者中时,弱被观察者不被销毁,观察者的引用将被一直抓着不能被释放。而这种情况在被观察者设为单例的情况下更加严峻。

    所以什么时候取消注册是一件非常棘手的事情。我们都希望可以观察在最后一刻,可什么时候是最后一刻却很难确定。

这篇关于观察者的前世今生的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/975262

相关文章

16.Spring前世今生与Spring编程思想

1.1.课程目标 1、通过对本章内容的学习,可以掌握Spring的基本架构及各子模块之间的依赖关系。 2、 了解Spring的发展历史,启发思维。 3、 对 Spring形成一个整体的认识,为之后的深入学习做铺垫。 4、 通过对本章内容的学习,可以了解Spring版本升级的规律,从而应用到自己的系统升级版本命名。 5、Spring编程思想总结。 1.2.内容定位 Spring使用经验

十四、观察者模式与访问者模式详解

21.观察者模式 21.1.课程目标 1、 掌握观察者模式和访问者模式的应用场景。 2、 掌握观察者模式在具体业务场景中的应用。 3、 了解访问者模式的双分派。 4、 观察者模式和访问者模式的优、缺点。 21.2.内容定位 1、 有 Swing开发经验的人群更容易理解观察者模式。 2、 访问者模式被称为最复杂的设计模式。 21.3.观察者模式 观 察 者 模 式 ( Obser

设计模式C++观察者模式

Observer 模式应该可以说是应用最多、影响最广的模式之一,因为 Observer 的一个实例 Model/View/Control( MVC) 结构在系统开发架构设计中有着很重要的地位和意义, MVC实现了业务逻辑和表示层的解耦。在 MFC 中, Doc/View(文档视图结构)提供了实现 MVC 的框架结构。在 Java 阵容中, Struts 则提供和 MFC 中 Doc/View 结构

Java设计模式(19):观察者模式

19,观察者模式(Observer) 19.1,问题引入_天气预报问题 气象站可以将每天测量到的温度、湿度、气压等发布出去,发布到自己的页面或者第三方系统发布的形式可以采用两种方式:修改数据等待获取和直接数据推送在进行数据推送时,需要明确对端系统,然后在变更时调用对端接口进行数据修改对端系统肯定是不确定多个,并且随时可能存在增减,如何对多系统进行管理,并进行数据推送,可以使用观察者模式 19

java中观察者模式的使用场景

观察者模式 是一种非常经典 非常常用的设计模式。  一个对象的行为 依赖于 另一个对象的状态。或者换一种说法,当被观察对象(目标对象)的状态发生改变时 ,会直接影响到观察对象的行为。 特点一 : 被观察者 和观察者 一般是 一对多的关系,一个被观察者 对应多个观察者,当一个被观察者的状态发生改变时,被观察者通知观察者, 然后可以在观察者内部 进行业务逻辑的处理。 JDK 提

设计模式--观察者

JDK自带观察者实现 package designpattern.observable.jdk;import java.util.Observable;/*** 发布者就是目标*/public class Publisher extends Observable {private int number;public int getNumber() {return number;}public

heygen的前世今生

heygen 关于徐卓&梁望国内创业&诗云科技成立heygen为什么原班人马在国内做和国外做产品,造成的结果如此迥异?技术原理 关于徐卓&梁望 徐卓本科毕业于同济大学,硕士毕业于卡内基梅隆大学计算机专业,之后在 Snap 工作了 6 年,是该司前100号员工,广告事业部 No.2 工程师,核心技术 Leader;曾在6 年间从 0 到 1 搭建 Snapchat 广告平台、推荐算

迭代器模式观察者模式

文章目录 1.引出迭代器模式1.展示院系结构2.传统方式 2.迭代器模式解决院系结构展示问题1.基本介绍2.原理类图3.类图4.代码实现1.Department.java 存储信息的对象2.College.java 被迭代的类型接口3.ComputerCollege.java 被迭代的具体实现类,存储数据并将其在创建迭代器的时候传进去4.ComputerCollegeIterator.ja

学习、探究Java设计模式——观察者模式

http://blog.csdn.net/a553181867/article/details/52454178 http://blog.csdn.net/a553181867/article/details/52454178 http://blog.csdn.net/a553181867/article/details/52454178 学习、探

一文理清OCR的前世今生

AI应用开发相关目录 本专栏包括AI应用开发相关内容分享,包括不限于AI算法部署实施细节、AI应用后端分析服务相关概念及开发技巧、AI应用后端应用服务相关概念及开发技巧、AI应用前端实现路径及开发技巧 适用于具备一定算法及Python使用基础的人群 AI应用开发流程概述Visual Studio Code及Remote Development插件远程开发git开源项目的一些问题及镜像解决办法