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


    观察者模式和发布-订阅模式到底有没有区别?

    在很多资料和书籍中,他们两者是相等的,但事实真是这样吗?

    首先看一下观察者模式:

    是一个对象,维护一个依赖列表,当状态发生改变时,会自动通知它们    

    来自维基百科的定义

    这就好比:你对 Google 的某个职位很感兴趣,但该职位目前已经没有空缺,于是你给 HR 留下了你的电话,HR 保证当职位空缺时会通知你。同时对这个职位感兴趣的候选人还有成百上千个,所以当职位空缺大家都会知道,如果你回应了 HR 的通知,HR 就会联系你进行面试。

    角色对比:Google 公司就是一个 Subject 对象,维护了 Observers (像你一样的候选人列表),当状态改变(职位空缺)就会 notify 候选人

    See the Pen Observer Pattern by 286810 (@286810) on CodePen.

    然后看一下发布-订阅模式:

    消息的发送方叫发布者(publisher),消息不会直接发送给特定的订阅者(subscriber)

    意思就是发布者和订阅者不知道对方的存在。需要一个第三方组件,叫做信息中介,它将订阅者和发布者串联起来,它过滤和分配所有输入的消息。

    来源: MSDN 博客

    最后,看一下对比图:

    来源: developers-club

    总结:

    • 在观察者模式中,Observers(观察者)是知道Subject的,Subject一直保持对Observers(观察者)进行记录。然而,在发布订阅模式中,Publisher(发布者)和Subscriber(订阅者)不知道对方的存在。它们只有通过消息队列进行通信。

    • 在发布订阅模式中,组件是低耦合的,正好和观察者模式相反。

    • 观察者模式大多数时候是同步的,比如当事件触发,Subject就会去调用观察者的方法。而发布-订阅模式大多数时候是异步的(使用消息队列)。

    • 观察者 模式需要在单个应用程序地址空间中实现,而发布-订阅更像交叉应用模式。

    参考:https://hackernoon.com/observer-vs-pub-sub-pattern-50d3b27f838c

  • 相关阅读:
    matlab代码学习_2018728
    理解面向对象过程中创造一个对象的步骤
    html字符及空格占位问题
    div中img(及文字等inline元素和block元素)的自动换行
    css布局居中
    css3前缀解决方案
    自己写一个树形导航菜单
    《JavaScript核心概念及实践》 读书笔记
    css常用属性
    windows下有个目录名称中间有空格 java读目录空格变成%20 处理方法
  • 原文地址:https://www.cnblogs.com/kuangliu/p/7922216.html
Copyright © 2020-2023  润新知