首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

发布者-订阅者 vs 观察者

发布者-订阅者(Publish-Subscribe)和观察者(Observer)模式是两种常见的软件设计模式,它们在处理分布式系统中的事件和数据传递时有着不同的优势。

发布者-订阅者模式是一种典型的消息传递模式,其中发布者(Publisher)和订阅者(Subscriber)之间通过一个中间的消息代理(Message Broker)进行通信。发布者将消息发布到消息代理中,而订阅者则从消息代理中订阅相关的消息。这种模式的优势在于它可以实现发布者和订阅者之间的解耦,发布者不需要知道订阅者的存在,反之亦然。此外,发布者-订阅者模式还具有弹性和可扩展性,可以方便地添加新的发布者和订阅者。

观察者模式是一种典型的对象行为模式,其中主题(Subject)和观察者(Observer)之间通过直接调用对象方法进行通信。当主题的状态发生变化时,它会通知所有注册的观察者。这种模式的优势在于它可以实现主题和观察者之间的解耦,主题不需要知道观察者的存在,反之亦然。此外,观察者模式还具有弹性和可扩展性,可以方便地添加新的主题和观察者。

推荐的腾讯云相关产品:

  • 腾讯云消息队列(Tencent Cloud Message Queue):一种基于发布者-订阅者模式的消息传递服务,可以帮助用户实现分布式系统中的事件和数据传递。
  • 腾讯云对象存储(Tencent Cloud Object Storage):一种基于观察者模式的对象存储服务,可以帮助用户实现对象的实时监控和备份。

产品介绍链接地址:

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Java-观察者模式(订阅-发布者模式)

定义 观察者模式也叫订阅-发布者模式,是一种一对一或者一对多的依赖关系,当一个对象改变状态,依赖它的对象会收到通知并自动更新。...观察者模式的结构 观察者模式主要由四个主要部分构成 (1)主题(Subject):主题也叫抽象被观察者,是一个接口,该接口规定了具体主题需要实现的方法,比如,添加、删除观察者以及通知观察者更新数据的抽象方法...(2)观察者(Observer):观察者是一个接口,该接口规定了具体观察者用来更新数据的方法。...具体主题需使用一个集合,比如ArrayList,存放观察者的引用,以便数据变化时及时通知具体观察者。...(4)具体观察者(ConcreteObserver):实现抽象观察者角色所需要的更新接口,对具体主题通知做出改变。

1.6K21

观察者模式 vs 发布订阅模式

常听到 "观察者模式 vs 发布/订阅模式", 两分别如何设计,有何不同,请看下文^_^ 01 单词解析 观察者模式 Observer : 观察者 Subject: 主题 Subscribe...: 订阅 Fire Event: 触发事件 发布订阅模式 Publisher: 发布者 Subscriber: 订阅 Event Channel: 事件通道(或调度中心)...Subscriber: 订阅 Fire Event : 触发事件 Publish topic :发布主题 Topic: 主题 02 观察者模式 vs 发布/订阅模式 观察者模式: 观察者(Observer...)直接订阅(Subscribe)主题(Subject) ,而当主题被激活的时候,会触发(Fire Event)观察者里的事件。...发布订阅模式: 订阅(Subscriber)把自己想订阅的事件注册(Subscribe)到调度中心(Topic),当发布者(Publisher)发布该事件(Publish topic)到调度中心,也就是该事件触发时

40520
  • 观察者模式 vs 发布订阅模式

    在发布订阅模式里,发布者,并不会直接通知订阅,换句话说,发布者订阅,彼此互不相识。 互不相识?那他们之间如何交流? 答案是,通过第三,也就是在消息队列里面,我们常说的经纪人Broker。 ?...发布者只需告诉Broker,我要发的消息,topic是AAA; 订阅只需告诉Broker,我要订阅topic是AAA的消息; 于是,当Broker收到发布者发过来消息,并且topic是AAA时,就会把消息推送给订阅了...当然也有可能是订阅自己过来拉取,看具体实现。 也就是说,发布订阅模式里,发布者订阅,不是松耦合,而是完全解耦的。 放一张极简的图,给大家对比一下这两个模式的区别: ?...总结 从表面上看: 观察者模式里,只有两个角色 —— 观察者 + 被观察者 而发布订阅模式里,却不仅仅只有发布者订阅两个角色,还有一个经常被我们忽略的 —— 经纪人Broker 往更深层次讲: 观察者和被观察者...,是松耦合的关系 发布者订阅,则完全不存在耦合 从使用层面上讲: 观察者模式,多用于单个应用内部 发布订阅模式,则更多的是一种跨应用的模式(cross-application pattern),比如我们常用的消息中间件

    54930

    Head First 设计模式之观察者模式,你我都是发布者订阅

    发布者订阅之间互不影响,满足开闭原则,当有变化的时候,实时,高效的通知订阅。...缺点:如果一个发布者对象有很多直接和间接的订阅的话,将所有的订阅都通知到会花费很多时间。如果在发布者之间有循环依赖的话,发布者会触发它们之间进行循环调用,导致系统崩溃。...生活中的观察者模式 老师布置作业,采用的就是观察者模式,老师是信息的发布者,学生是订阅,老师布置作业只需要布置一遍即可,所有的学生,都能收到这个任务。...群社区也是观察者模式的一种形式,有相同爱好兴趣的人加入到同一个群,每一个人既是消息的发布者,也是订阅,让大家的沟通更实时高效。...app消息订阅、报纸订阅、新闻订阅等等都是观察者模式,观察者模式无处不在,我们既是内容生产也是内容的消费。 我的启发 我们既是内容的生产,不断的创造内容。作为内容的生产,请保持内容的质量。

    82340

    『设计模式』80年代的人们就已经领悟了设计模式-- 发布者订阅模式 (包括发布者订阅模式和观察者模式的区别)

    无数的编辑将新闻发到报设,报社在将信息整合到报纸同意发送到读者手中,显然这不是观察者模式,观察者模式中,观察者和主题有着很强的耦合性,而在这里显然记者不认识读者,读者也不能通过报纸直接和编辑通信,这就是发布者订阅模式...我们放几张图,方便理解: 总结出的差异 在观察者模式中,观察者知道主题,主题也维护观察者的记录。而在发布者/订阅中,发布者订阅不需要彼此了解。...在发布者/订阅模式中,与观察者模式相反,组件是松散耦合的。 观察者模式大多数是以同步方式实现的,即,当某个事件发生时,主题调用其所有观察者的适当方法。...观察者模式需要在单个应用程序地址空间中实现。另一方面,发布者/订阅模式更多地是跨应用程序模式。...注: 上文参考地址:https://hackernoon.com/observer-vs-pub-sub-pattern-50d3b27f838c 优点: 松耦合 发布者订阅松耦合,甚至不需要知道它们的存在

    63020

    观察者模式 &发布订阅模式

    观察者模式属于行为型模式,行为型模式关注的是对象之间的通讯,观察者模式就是观察者和被观察者之间的通讯。 优点: 1.观察者和被观察者是耦合的。...2.如果观察者观察者目标有循环引用的化,观察者目标会循环调用,可能导致系统崩溃 3.观察者模式没有相应的机制让观察者知道所观察的目标对象是怎么变化的,而是仅仅知道观察者目标发生了变化。...发布订阅模式 定义 发布订阅模式基于观察者模式,他只是观察者模式的一个别称。 但是经过时间的沉淀,似乎他已经强大了起来,已经独立于观察者模式,成为另外一种不同的设计模式。...在现在的发布订阅模式中,称为发布者的消息发送不会将消息直接发送给订阅,这意味着发布者订阅不知道彼此的存在。...在发布者订阅之间存在第三个组件,称为消息代理或调度中心或中间件,它维持着发布者订阅之间的联系,过滤所有发布者传入的消息并相应地分发它们给订阅

    35830

    发布订阅模式与观察者模式

    观察者模式(Observer Pattern): 一种一对多的依赖关系,当一个对象发生改变,所有依赖这个对象的都将得到通知,并更新。观察者直接订阅主题,当主题发生变更,直接通知观察者。...发布订阅模式(Publish/Subscribe Pattern): 起初发布订阅模式也叫观察者模式的别名,慢慢的独立成一个不同的设计模式。...订阅把想订阅的事件注册到中间代理,发布者发布事件到中间代理,由中间代理统一发送给订阅观察者模式的观察者相当于发布订阅模式的订阅,两的最大区别就是发布订阅模式有了一个中间机制。...观察者模式当对象状态发生改变,直接通知观察者,所以对象和观察者是松散的耦合在一起的,而且是同步实现。...:用户3 //用户2订阅了:用户3 //用户3发布了一条消息 //订阅了用户3的用户1收到了这条消息 //订阅了用户3的用户2收到了这条消息 这就是观察者模式,观察者关联了目标对象(user3),当目标对象发布消息的时候

    44720

    发布订阅模式与观察者模式

    在现在的发布订阅模式中,称为发布者的消息发送不会将消息直接发送给订阅,这意味着发布者订阅不知道彼此的存在。...在发布者订阅之间存在第三个组件,称为消息代理或调度中心或中间件,它维持着发布者订阅之间的联系,过滤所有发布者传入的消息并相应地分发它们给订阅。...A就是发布者,你是订阅,微博就是调度中心,你和A是没有直接的消息往来的,全是通过微博来协调的(你的关注,A的发布动态)。 观察者模式和发布订阅模式有什么区别?...而发布订阅模式中统一由调度中心进行处理,订阅发布者互不干扰,消除了发布者订阅之间的依赖。这样一方面实现了解耦,还有就是可以实现更细粒度的一些控制。...观察者模式是不是发布订阅模式 网上关于这个问题的回答,出现了两极分化,有认为发布订阅模式就是观察者模式的,也有认为观察者模式和发布订阅模式是真不一样的。

    1.1K20

    【RxJava】RxJava 基本用法 ( 引入 RxJava 依赖 | 定义 Observer 观察者 | 定义 Observable 被观察者 | 被观察者订阅观察者 )

    Observable 通过 订阅观察者 来实现 消息的传递。 Observer(观察者): Observer 表示一个接收 Observable 发送消息 的观察者。...订阅可以被取消, 取消订阅后 Observer 观察者将不再接收 Observable 被观察者 的消息。..., 并且通过订阅观察者订阅到被观察者中 ; 订阅操作 , 就会同时发送消息给 观察者 ; Observer 观察者定义代码 : Observer observer = new Observer...订阅可以被取消, 取消订阅后 Observer 观察者将不再接收 Observable 被观察者 的消息。...调用 Observable 被观察者 的 subscribe 函数 , 订阅 Observer 观察者 ; 该订阅操作的同时 , 会将消息发送给 Observer 观察者 , 触发 Observer#onNext

    50820

    谈谈观察者模式和发布订阅模式

    1、观察者vs发布订阅 首先观察者跟发布订阅这两虽然看起来很相似,但是两是有差异的,至少从实现方式上就有差异。...其次,虽然两有差异,但是说发布订阅模式是观察者模式的变异也是ok的,因为它们思想上是一致的。...观察者vs发布订阅 下面我们就用结合代码来捋一捋。...3、发布订阅模式 (1)理解 当你了解了观察者模式房东—租客这种模型以后,你会发现,如果观察者很多,那么房东压力还是挺大的,比如收钱的压力。...然而,在发布订阅模式中,发布者订阅不知道对方的存在。它们只有通过消息代理进行通信。 在发布订阅模式中,组件是松散耦合的,正好和观察者模式相反。

    1.2K10

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

    观察者模式属于行为型模式,行为型模式关注的是对象之间的通讯,观察者模式就是观察者和被观察者之间的通讯。 观察者模式有一个别名叫“订阅—发布模式”。...Pub-Sub Pattern 在“发布者-订阅”模式中,称为发布者的消息发送不会将消息编程为直接发送给称为订阅的特定接收。这意味着发布者订阅不知道彼此的存在。...然而,在发布者/订阅中,发布者订阅不需要彼此了解。他们只是在消息队列或代理的帮助下进行通信。...观察者模式主要以同步方式实现,即当某些事件发生时,Subject调用其所有观察者的适当方法。 发布者/订阅在 实现大多异步方式(使用消息队列)。 观察者模式需要在单个应用程序地址空间中实现。...另一方面,发布者/订阅模式更像是跨应用程序模式。 尽管这些模式之间存在差异,但有些人可能会说发布者 - 订阅模式是观察者模式的变体,因为它们之间存在概念上的相似性,但并不是一样的,欢迎拍砖!

    78720

    Java设计模式-观察者模式(订阅发布模式)

    Java设计模式-观察者模式(订阅发布模式) 一起来看 会了就当复习丫,不会来一起来看看吧。 很喜欢一句话:“八小时内谋生活,八小时外谋发展”。 如果你也喜欢,让我们一起坚持吧!!...3)角色结构: Subject:抽象主题(抽象被观察者),抽象主题角色把所有观察者对象保存在一个集合里,每个主题都可以有任意数量的观察者,抽象主题提供一个接口,可以增加和删除观察者对象。...ConcreteSubject:具体主题(具体被观察者),该角色将有关状态存入具体观察者对象,在具体主题的内部状态发生改变时,给所有注册过的观察者发送通知。...我们使用观察者模式来模拟这样的场景,微信用户就是观察者,微信公众号是被观察者,有多个的微信用户关注了XXX这个公众号。...//通知订阅更新消息 public void notify(String message); } 微信公众号是具体主题(具体被观察者),里面存储了订阅该公众号的微信用户,并实现了抽象主题中的方法

    1K10

    观察者设计模式 Vs 事件委托(java)

    https://blog.csdn.net/gdutxiaoxu/article/details/51824769 观察者设计模式 Vs 事件委托 标签: 设计模式 java 事件的委托...观察者模式的优缺点 如何看待观察者模式的缺点 事件的委托 什么是观察者模式 简单来说,当有多个观察者想同时观察同一个主题对象的时候,当主题对象的 状态发生变化,观察者能够回调自身的方法去更新自己 观察者模式的类...UML图 image.png 实现步骤 要定义一个观察者接口 观察者实现观察者接口 要有一个被通知者接口,里面有addObserver(Observer observer), removeObserver...Android系统内容提供 ,内容观察者就采用了这种观察者模式 RecyClerView和ListView的 Adapter就采用了观察者模式,关于RecyclerView的Adapter是怎样实现观察者模式的...---- 观察者模式的优缺点 优点 很好地解耦了通知者与观察者观察者不需要了解通知者内部是怎样实现的,方便于日后代码的修改,体现了 依赖倒转的原则。

    1.3K30

    【EventBus】发布-订阅模式 ( EventBus 组成模块 | 观察者模式 )

    文章目录 一、发布-订阅模式 二、EventBus 组成模块 三、观察者模式 一、发布-订阅模式 ---- 发布订阅模式 : 发布者 Publisher : 状态改变时 , 向 消息中心 发送事件 ;..., 确定事件应该发送给哪个订阅 ; EventBus 是 发布 - 订阅 模式 的事件总线框架 , 事件的 发布者订阅 实现了解耦 , 简化了 Android 中各个组件之间的通信 ; 三...、观察者模式 ---- 观察者模式中 , 目标对象 ( Subject / 被观察者 ) 中 , 维护了多个 观察者 , 观察者需要注册到 目标对象 中 , 如果目标对象发生改变 , 通知所有的观察者..., 观察者对象 收到通知后 , 进行相关处理 ; 上述结构中 , 观察者 与 目标对象 ( 被观察者 ) 是有 耦合性 的 ; 发布 - 订阅 模式 中 , 发布者订阅 是完全解耦的 ; 发布...- 订阅 模式 比 观察者模式 多了一个消息中心 , 这个 消息中心 是 发布者订阅 之间解耦的关键 ;

    45110

    订阅发布模式到底是不是观察者模式?

    读者只要订阅对应平台的主题(Topic)就能收到文章的推送。 ? Pub-Sub Pattern 上图就是简单的发布订阅的示意图。发布订阅由以下几种角色组成: Publisher 发布者。...当消息从Publisher发出后,由Broker对消息进行定向转发到主题(Topic),同时维护主题(Topic)和订阅的关系。Broker将发布者订阅进行了彻底的解耦。...订阅发布模式的优点:订阅发布是基于事件驱动的,是具有响应式特点的,可以实现背压,异步。发布者订阅双方是完全解耦的。你可以轻松引入新的发布者和新的订阅而无需修改原有的代码。...当然它也存在着不足:首先订阅获取消息可能需要通过轮询或者迭代的方式。由于发布者订阅是完全解耦的,那么发布者的发布状态无法直接被订阅获取,订阅的消费状态也无法直接被发布者获取。...有很多文章说观察者模式和订阅发布是一个东西;还有的说不是一个东西;众说纷纭,不知道你怎么看。

    1.3K20

    java设计模式之-观察者模式(发布-订阅模式)

    1.观察者模式定义  观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。   这个主题对象在状态上发生变化时,会通知所有观察者对象,让它们能够自动更新自己。...2.观察者模式结构图 ?   ...3.观察者模式的构成   ●  抽象主题(Subject)角色:抽象主题角色把所有对观察者对象的引用保存在一个聚集(比如ArrayList对象)里,每个主题都可以有任何数量的观察者。...●  具体观察者(ConcreteObserver)角色:存储与主题的状态自恰的状态。具体观察者角色实现抽象观察者角色所要求的更新接口,以便使本身的状态与主题的状态 像协调。...; 24 } 25 26 System.out.println("本次游戏主题发布者:"+gameSub.getName()); 27

    1.8K40
    领券