观察者模式——出版者与订阅者 分手后的思念是犯贱 2022-08-12 10:59 163阅读 0赞 在说Java内置的观察者模式之前,我们先来回顾一下大话中这个模式的例子。如下图,前台负责通知那些看股票和看新闻的人,告知他们情况,这些看股票、看新闻的人对此做出反应,比如停下来继续工作等等。 故事大概就是这样,回忆不起来的同学可以再翻翻书看一下。 ![SouthEast][] 回忆了观察者模式之后,我们来看一个新的例子——出版者和订阅者。 观察者模式定义了一系列对象之间的一对多的关系。 先不看复杂的类图,看一张简单的图:三个订阅者订阅了该出版社,当出版社有了新的书籍或杂志的话,就将消息通知给三位订阅者,他们三个就是观察者。 当一个对象改变状态,其他依赖者就会收到通知。 ![Center][] 由上面的图,可以看出。主题对象(上面的出版者)与观察者(订阅者A,B,C)他们是一对多的关系,可不可能是多对多呢? 当然不可以,虽然在实际上一个订阅者可能会订阅多个出版者,但在观察者中,我们让多个观察者同时监听一个主题对象,当主体对象在状态上发生变化时会自动通知观察者,使他们能够自动更新自己。在这里,还可以回到开篇的例子中,如果有两个前台,一个说老板来了,一个说老板没来,那不就乱套了。 观察者的“去”与“留” 订阅者A说到,这家出版社太不行了,新闻不够及时,书也不好看,我不想订阅了。这时候A是不可以自己擅自离开这个观察者群体的,他要向出版者请示,待出版者同意后,把A从中剔除,A以后就不会再收到出版者的消息了。 同样,如果D想成为一个订阅者,他也不能擅自进入,也要等待主题对象的批准才可以进入。 为了交互对象之间的松耦合设计而努力 在出版者和订阅者的例子中,二者并不十分清楚对方内部的结构和细节部分。这就是一种松耦合的设计,这样一来,也使得观察者的“去”和“留”更加灵活,系统也更富有弹性。 观察者模式中的“推”与“拉” 出版者得到消息后,通知给订阅者。在这个过程中,显然出版者处于主动地位,而订阅者是被动接受通知才改变自己的。所以说,主题对象出版者一直是在往外推,而不让观察者们从自己中取(也就是所谓的”拉“)。 Java内置的观察者模式 这里要用到的是java.util包中的Observer接口和Observable类。 ![Center 1][] 在Java中,使用Observable类和Observer接口后,不再是Subject和Observer两个接口了,取而代之的是Java内置的Observable类和Observer接口。因此,Publisher是继承而非实现。 注意: 1)虽然两个图中都有Observer接口,但这两个是不同的。一个是自己定义的接口,一个是Java中已经有的接口。 2)类图中的一些方法都略去了,主要为了体现大体上的关系。 ![Center 2][] 小结: 再一次学习设计模式,跟第一次学大话的时候很不一样。《Head First》中总会给你一些新的理解,比如博客中蓝字标出的文字,如果不能理解这些原则,即使代码实现了也没有多大的收获。所以,博客中并没有给出观察者模式的代码实例。 学习需要反复,每一个反复都让你的认识更加深入。 [SouthEast]: /images/20220810/4213ee83baea4121bb4ab1dad3f68642.png [Center]: /images/20220810/79bf90d426cb4db8890909e1bc95f6c5.png [Center 1]: /images/20220810/7ec36911b7c04bc6a12c09a84a88255b.png [Center 2]: /images/20220810/b488617ec23346e9a283afb177434944.png
相关 观察者模式与订阅发布模式的区别 1、观察者模式 观察者模式定义了对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都将得到通知,并自动更新。观察者模式属于行为型模式,行为型模式 水深无声/ 2023年10月07日 20:01/ 0 赞/ 54 阅读
相关 观察者模式 vs 发布订阅模式 目录 场景 观察者模式 发布订阅模式 总结 -------------------- 场景 有一回面试,面试官问: 末蓝、/ 2023年10月06日 19:03/ 0 赞/ 2 阅读
相关 订阅发布和观察者模式 发布订阅模式 > 把多个方法暂存起来,最后一次触发执行 作用: 解偶 使用场景: 如,多个类或者函数内,可以分散订阅某个操作,最后统一发布。分散的好处就是不 ╰+攻爆jí腚メ/ 2022年08月28日 14:47/ 0 赞/ 209 阅读
相关 观察者模式——出版者与订阅者 在说Java内置的观察者模式之前,我们先来回顾一下大话中这个模式的例子。如下图,前台负责通知那些看股票和看新闻的人,告知他们情况,这些看股票、看新闻的人对此做出反 分手后的思念是犯贱/ 2022年08月12日 10:59/ 0 赞/ 164 阅读
相关 js 订阅者模式(观察者模式) 原文网址:http://www.cnblogs.com/LuckyWinty/p/5796190.html [附加题] 请实现下面的自定义事件 Event 对 悠悠/ 2022年07月15日 13:15/ 0 赞/ 193 阅读
相关 观察者模式(发布-订阅者模式) 观察者模式定义了一种依赖关系,解决了主体对象和观察者之间功能的耦合,主要应用于大型项目的模块化开发中,解决团队开发中模块之间的通信问题,利用观察者模式还可以实现自定义事件。 素颜马尾好姑娘i/ 2022年05月22日 06:00/ 0 赞/ 216 阅读
相关 javascript 观察者模式 发布订阅模式 观察者模式 观察者模式,每一个观察者对象有两个方法 添加监听`subscribe` 发布事件`publish` 观察者有个`list`存放所有的已经添加监 本是古典 何须时尚/ 2022年04月24日 10:14/ 0 赞/ 213 阅读
相关 学习观察者模式与发布/订阅模式 > 最近学习了观察者模式和发布/订阅模式,但是一直有种不得要领的感觉,今天重新复习了一遍又有了新的思考,记录一下学习收获。 观察者模式 概念引用原文的话如下: > T 港控/mmm°/ 2022年01月20日 03:55/ 0 赞/ 283 阅读
相关 发布订阅模式(观察者模式) 设计模式的目的就是使类成为可复用的组件。 在观察者模式中观察者接口只注重被观察者,而被观察者接口只注重观察者,具体是观察者接口实现类中的哪一个并不在意,而被观察者也是如此。这 清疚/ 2021年12月15日 00:27/ 0 赞/ 291 阅读
还没有评论,来说两句吧...