博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
观察者模式与发布/订阅模式的区别
阅读量:4676 次
发布时间:2019-06-09

本文共 753 字,大约阅读时间需要 2 分钟。

       

        不管是维基百科还是百度百科,搜索观察者模式,都会发现观察者模式的定义是观察者模式(有时又被称为发布/订阅模式),即一个目标对象管理所有相依于它的观察者对象,并且在它本身的状态改变时主动发出通知。这通常透过呼叫各观察者所提供的方法来实现。此种模式通常被用来实作事件处理系统。最开始老师让我区别观察者模式与发布/订阅模式,简直无从下手。感觉明明就是一样的,而且《设计模式》书中也很明确地给出了观察者模式又称为发布/订阅模式,但是后来查了很多资料、也问了老师之后发现观察者模式与发布/订阅模式还是有区别的。

 

(1)观察者模式本质上是一种对象行为模式,而 发布/订阅模式本质上是一种架构模式,强调组件的作用

(2)观察者模式定义了对象间的一种一对多依赖关系,使得每当一个对象改变状态,则所有依赖于它的对象都会得到通知并采用一种机制实现自动更新。观察者模式的被观察者对象即目标对象中保留了观察者的集合,当被观察者对象的状态发生变化时,会遍历观察者对象集合,然后通知观察者对象得到更新。而发布/订阅模式并不保留观察者与被观察者之间的消息,类似一种生产者消费者问题。

 

生产者把数据放入缓冲区,消费者从缓冲区取出数据。发布/订阅模式强调组件的作用,生产者通过组件将数据推(push)送到缓冲区,通过组件通知消费者是否选择将缓冲区的数据拉(pull)过来,即取出数据。发布/订阅模式很好地实现了解耦。比如彩信,在我们手机的客户端获取彩信短信后,并没有获取它的全部内容,当我们选择获取后,再从缓冲区里将我们希望获取的内容得到。

(3)观察者模式多应用在单片机,而发布/订阅模式更多地在分布式环境中应用。

    

转载于:https://www.cnblogs.com/cangqiongbingchen/p/5005254.html

你可能感兴趣的文章
eclipse jsp html 格式化 format
查看>>
关于手机端IOS系统微信中虚拟键盘遮挡input输入框问题的解决方案 草稿
查看>>
css3背景、边框、和补丁相关属性 (二)
查看>>
Python--小功能应用
查看>>
别做操之过急的”无效将军”,做实实在在的”日拱一卒”
查看>>
js去除范围内所有标签并显示指定字符串
查看>>
结对项目进度2
查看>>
git + git flow 的简单介绍
查看>>
如果我们想要交换两个数字,就可以使用位运算
查看>>
求给出第 K个 N位二进制数,该二进制数不得有相邻的“1”
查看>>
P1059 明明的随机数【去重排序】
查看>>
HDU 1060 Leftmost Digit【log10/求N^N的最高位数字是多少】
查看>>
tomcat配置文件web.xml与server.xml解析--重要
查看>>
【C语言】《C Primer Plus》递归:以二进制形式输出整数
查看>>
使用框架的——好处
查看>>
如此大量的代码,但每个类里面的代码却不显得特别多,原因。。。。。。。。。。。。...
查看>>
C#特征备忘
查看>>
Java 面向对象 之 final 关键字
查看>>
Contact Form 7邮件发送失败的解决办法
查看>>
P1800 software_NOI导刊2010提高(06)
查看>>