zoukankan      html  css  js  c++  java
  • 观察者模式 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

  • 相关阅读:
    【自学php】第三天
    【自学php】第二天
    【自学php】第一天-macbook上配置php
    js数值转换
    js题
    【练习】响应式布局
    6.数据查询
    5.删除数据
    4.更新数据
    3.插入数据
  • 原文地址:https://www.cnblogs.com/kuangliu/p/7922216.html
Copyright © 2011-2022 走看看