观察者和发布订阅者区别

观察者模式和发布订阅模式区别与实现 备注:本文所有代码采用ES6书写。 什么是观察者模式? 观察者模式是软件设计模式的一种。在此种模式中,一个目标对象管理所有相依于它的观察者对象,并且在它本身的状态改变时主动发出通知。 以上是维基百科对于观察者模式的定义。其实上面这段话不难理解,打个比方。双十一之前,你看上了一个腿打折的商品需要预约,系统会在双十一的时候提醒所有点了预约的用户来抢货。 我们来解析一下这个过程。系统就可以看做是目标... 阅读详情

答案:

他们都属于观察者模式,只不过有不同的实现方法。发布订阅相比于观察者多了一个调度中心,发布者通过调度中心向订阅者发布消息。观察者模式中目标和观察者相互依赖,观察者订阅目标主题,当目标发生变化后,会通知对应观察者。

 

详细解析:

设计模式的定义是:在面向对象软件设计过程中针对特定问题的一种解决方案。

设计模式并不直接用来完成代码的编写,而是描述在各种不同情况下,要怎么解决问题的一种方案,他不是一个死的机制,他是一种思想,一种写代码的形式。

观察者模式(Observer Pattern)

观察者模式定义了对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都将得到通知,并自动更新。观察者模式属于行为型模式,行为型模式关注的是对象之间的通讯,观察者模式就是观察者和被观察者之间的通讯。

发布订阅模式(Pub-Sub Pattern)

在现在的发布订阅模式中,称为发布者的消息发送者不会将消息直接发送给订阅者,这意味着发布者和订阅者不知道彼此的存在。在发布者和订阅者之间存在第三个组件,称为消息代理或调度中心或中间件,它维持着发布者和订阅者之间的联系,过滤所有发布者传入的消息并相应地分发它们给订阅者。

举一个例子,你在微博上关注了A,同时其他很多人也关注了A,那么当A发布动态的时候,微博就会为你们推送这条动态。A就是发布者,你是订阅者,微博就是调度中心,你和A是没有直接的消息往来的,全是通过微博来协调的(你的关注,A的发布动态)。

这两个模式的实现结构:

观察者模式和发布订阅模式最大的区别就是发布订阅模式有个事件调度中心。

观察者模式:观察者(Observer)直接订阅(Subscribe)主题(Subject),而当主题被激活的时候,会触发(Fire Event)观察者里的事件。

发布订阅模式:订阅者(Subscriber)把自己想订阅的事件注册(Subscribe)到调度中心(Topic),当发布者(Publisher)发布该事件(Publish topic)到调度中心,也就是该事件触发时,由调度中心统一调度(Fire Event)订阅者注册到调度中心的处理代码。

观察者模式和与发布订阅模式的区别 这两天面试问到了这个问题,下来就重点学习了一下1.观察者模式:在软件设计中是一个对象,维护一个依赖列表,当任何状态发生改变自动通知它们。举个例子:假设我正在找一份软件工程师的工作,对“XX公司”很感兴趣。所以我就联系了他们的HR,给了他我的联系电话。他保证如果有任何职位空缺都会通知你。这里还有几个候选人也你一样很感兴趣。所以职位空缺大家都会知道,如果你回应了他们的通知,他们就会联系你面试。所以,以... 阅读详情

相关推荐

模拟ic入门——设计一个单极运放(一)单级运算放大器设计基础

主要介绍了单级运放的基本理论和使用场景

qq_64956710的博客 3738

观察者模式(发布—订阅模式)学习笔记

又叫观察者模式(Observer Pattern),它是指对象之间一对多的依赖关系,每当那个特定对象改变状态时,所有依赖于它的对象都会得到通知并被自动更新。

m0_63869023的博客 1046

【日常小结】项目Modbus RTU 协议

Modbus RTU(远程终端) 协议 一、前言 最近因为码跺宽度测量项目推广升级,更换了摄像头(换成了基恩士摄像头)和光栅(换成了施莱格05LCM系列光栅),导致原来的程序用不了了,然而这个软件升级的任务落到了我身上,作为机械非科班出身的我要学习TCP和Modbus RTU通信协议,也算是自我突破了。本文只对Modbus/RTU/HEX 进行简单的小结。 二、Modbus Modbus是一种串行通信协议,是Modicon公司(现在的施耐德电气Schneider Electric)于1979年为使用可编程逻

weixin_39681471的博客 830

观察者(订阅)模式

原本目标对象在状态发生改变的时候,需要直接调用所有的观察者对象,但是抽象出观察者接口以后,目标和观察者就只是在抽象层面上耦合了,也就是说目标只是知道观察者接口,并不知道具体的观察者的类,从而实现目标类和具体的观察者类之间解耦。如果在更改一个对象的时候,需要同时连带改变其他的对象,而且不知道究竟应该有多少对象需要被连带改变,这种情况可以选用观察者模式,被更改的那一个对象很明显就相当于是目标对象,而需要连带修改的多个其他对象,就作为多个观察者对象了。里面维护了观察者对象,以及注册、移除观察者,通知观察者等。

Filwaod 2235

Innovus ECO修复时序违例:ecoAddRepeater插Buffer原理与实战

芯片物理设计越到后期,时序收敛越依赖局部修正而非全局重跑。ECO(Engineering Change Order)作为数字后端高频操作,能在不破坏既有布局布线结果的前提下,精准修复DRV违例、hold时序问题或实现功能补丁。其中,插入Buffer或Inverter是拆解长线RC负载、改善max_transition/max_capacitance最直接的手段。Innovus提供的ecoAddRepeater命令封装了单元选择、坐标摆放和网表重连等底层细节,配合ecoRoute可快速完成绕线。合理选型Buf

weixin_31858171的博客 299

Python爬虫实战:5分钟搞定Boss直聘数据抓取(附完整代理IP配置)

本文详细介绍了如何使用Python爬虫高效抓取Boss直聘的招聘数据,包括环境配置、反爬策略、数据采集与存储、数据分析等完整流程。通过实战案例,帮助开发者快速掌握招聘市场数据抓取技术,为职业决策提供数据支持。

weixin_30832143的博客 346

观察者模式和发布订阅模式的区别

之前一直对观察者模式和发布订阅模式的区别理解不深,正好这段时间在看vue源码的分析,vue数据双向绑定也用到了发布订阅模式,于是又把这两者探究了一番,今天做个笔记加强印象。 观察者模式和发布订阅模式最大的区别就是发布订阅模式有个事件调度中心。 pubSub.png 从图中可以看出...

333

电容式三点式振荡电路/电感式三点振荡电路基础知识及Multisim电路仿真

摘要:三极管振荡电路利用放大特性与正反馈实现自激振荡,需满足巴克豪森条件(增益≥1,相位匹配)。核心由放大级、反馈网络、选频网络和稳幅环节构成。主要分为三类:1)LC/RC正弦波振荡电路(如电容三点式、电感三点式),输出高频/低频正弦波;2)多谐振荡电路,通过电容充放电产生方波;3)张弛振荡电路,生成锯齿波等。设计需关注相位匹配、增益控制和元件适配。LC振荡频率由谐振参数决定,RC振荡由时间常数控制。稳幅机制通过非线性或主动元件维持等幅输出。该电路在信号发生、时钟源等领域有广泛应用。

XU157303764的博客 2036

观察者模式与订阅发布模式的区别

1、观察者模式 观察者模式定义了对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都将得到通知,并自动更新。观察者模式属于行为型模式,行为型模式关注的是对象之间的通讯,观察者模式就是观察者和被观察者之间的通讯。 观察者模式有一个别名叫“发布-订阅模式”,或者说是“订阅-发布模式”,订阅者和订阅目标是联系在一起的,当订阅目标发生改变时,逐个通知订阅者。我们可以...

dkjtyhj3671的博客 874

量化 insider 爆料! 散户打板必亏?(打板必看!量化资金如何“隔日砸盘”收割散户)

量化开发 insider 爆料💥 散户追的涨停板📉,可能是机构故意做的陷阱!本文从技术视角拆解“涨停陷阱”,帮你看清市场真实逻辑🧠。

XiaoqiangClub的博客 450

什么是 SAP S/4HANA 的 Brown Field 迁移和 Green Field 迁移

Brown Field实施涉及升级现有的 SAP 环境并继续使用一些遗留组件。它类似于传统升级,因为它涉及软件更新、一些数据转换和一些业务流程的调整。它仍然具有破坏性,但比Green Field实施要少得多。如果你是风险厌恶者,倾向于逐步使用 S/4HANA 的功能,或担心 S/4HANA Green Field方法的成本,那么你可能更喜欢这种方法。混合方法结合了Brown Field和Green Field迁移的一些元素。它从公司的 SAP 系统的副本开始,包括配置设置和定制。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1322

观察者和发布订阅模式的区别

观察者和发布订阅模式的区别 观察者模式和发布订阅模式有什么区别? 大多数的回答都是:Publishers + Subscribers = Observer Pattern,24种基本的设计模式并没有发布-订阅模式,发布订阅模式属于并发型模式;像典型的Mq;这两种相似单并不可以划等号。 我们来重新来回顾一下这两种模式: Observer Pattern 观察者模式定义了对象之间的一对多依赖,这样一来,当一个对象改变状态时,它的所有依赖者都会收到通知并自动更新。而观察者模式属于行为型模式,行为型模式关注的是对象

m0_48560510的博客 403

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

发布订阅者模式和观察者模式的区别

发布订阅者模式和观察者模式的区别 1.什么是观察者模式 定义:当对象之间存在一对多的依赖关系时,其中一个对象的状态发生改变,所有依赖它的对象都会收到通知,这就是观察者模式。 在观察者模式中,只有两种主体:目标对象 (`Object`) 和 观察者 (`Observer`)。 目标对象 `Subject`: - 维护观察者列表 `observerList` - 定义添加观察者的方法 - 当自身发生变化后,通过调用自己的 `notify` 方法依次通知每个观察者执行 `update` 方法 观察者 Obs

qq_45803050的博客 5345

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

发布订阅和观察者模式的区别

有些人认为观察者模式就是发布订阅模式,实际上观察者模式是包含了订阅发布模式,发布订阅模式只是观察者模式中的一种。观察者模式是观察者和被观察者之间的通信,而发布订阅模式中间增加了一个中转层,通过第三方来分发信息。 观察者模式 // Subject为被观察者,Subject中的状态(state)改变,就通知 Observer更新 class Subject { constructor() { this.observes = [] this..

高先生的猫 492

发布订阅模式和观察者模式区别

一 观察者模式 观察者模式定义了对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都将得到通知,并自动更新。观察者模式属于行为型模式,行为型模式关注的是对象之间的通讯,观察者模式就是观察者和被观察者之间的通讯。 二 发布订阅模式 三 观察者模式与发布订阅模式区别 四 观察者模式与发布订阅模式优缺点 ...

sky_100的博客 827

观察者模式和发布订阅模式区别

观察者模式和发布订阅模式区别: 一、从表面上看: 观察者模式里,只有两个角色 —— 观察者 + 被观察者 而发布订阅模式里,却不仅仅只有发布者和订阅者两个角色,还有一个经常被我们忽略的 —— 经纪人Broker 二、往更深层次讲: 观察者和被观察者,是松耦合的关系 发布者和订阅者,则完全不存在耦合 三、从使用层面上讲: 观察者模式,多用于单个应用内部 发布订阅模式,则更多的是一种跨应用的模式(...

hkduan的博客 1万+

JavaScript 发布订阅者模式和观察者模式及区别

发布订阅模式其实是一种对象间一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都将得到状态改变的通知。多方订阅,一方发布,订阅放会收到通知举例:教学楼中每个教室都有一个广播器,例如甲同学进入了A教室,甲同学可以理解为订阅,A教室有着A教室的订阅者,当校长只对A教室的广播进行播放时,只有A教室的所有学生可以受到广播信息。常见的发布订阅比如 Vue中js实现一个发布订阅我们发现每次进行订阅、通知都是在使用events中的 clientList, 并不会直接用$on 和 $emit 发生关系。

^_^ 1304

观察者和发布订阅的区别

回到我们最开始的例子,微信公众号的订阅,看似是直接关注了公众号,实质上,在关注和推送的两种行为中,都是要通过“微信公众平台”这个第三方来实现的。通过事件中心,发布者和订阅者进行了进一步的解耦,发布者无需关心订阅者的订阅情况,而是直接发布主题到事件中心即可。3、缺乏相应的机制通知观察者观察目标是如何发生变化的,观察者仅仅是得知观察目标发生了变化。正如我们上述实现,存在一个ArrayList来保存所有的观察者,如果这个ArrayList中的元素足够大,那么在通知时程序的执行效率势必是很低下的。

jialiang808的博客 309

观察者及发布订阅模式区别详解及js实现

观察者模式和发布订阅模式的概念在项目开发中很常见 ,这里记录一下自己的理解,详解一下两者的区别的并分别用代码实现来直观体现两者区别,便于日后温故知新 观察者模式 ​ 观察者模式别名也叫发布-订阅模式,但是发布订阅模式其实只是观察者模式中的一种具体的实现方式 通常我们所说的观察者和发布订阅模式的区别,其实只是把观察者模式的一种原始的实现方式和现在的流行的发布订阅实现方式对比)。 ​ 好了,现在先...

有问题 ! 请留言 ! 941

观察者模式VS发布订阅模式区别

比如发布者发布了很多消息,但是不想所有的订阅者都接收到,就可以在调度中心做一些处理,类似于权限控制之类的。观察者模式: 观察者(Observer)直接订阅(Subscribe)主题(Subject),而当主题被激活的时候,会触发(Fire Event)观察者里的事件。以意图来分辨模式,都是实现了对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都将得到通知,并自动更新,那么他们就是同一种模式;观察者模式由具体目标调度,每个被订阅的目标里面都需要有对观察者的处理,会造成代码的冗余。

最爱松露巧克力 2776
上一篇: call/apply/bind作用和区别
下一篇: EventLoop
SpringRolls
博客等级 码龄9年 73粉丝 129原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值