sunnyxujian's blog sunnyxujian's blog
首页
  • JavaScript
  • CSS
  • HTML和浏览器
  • Vue
  • Vue3
  • React
  • 基础知识
  • webpack
  • rollup
  • vite
  • 其他
  • Nodejs
  • 网络
  • TypeScript
  • 架构设计
  • 性能优化
  • 数据结构和算法
  • JavaScript教程 笔记
  • ES6 教程 笔记
  • TypeScript 从零实现 axios
  • Git学习 笔记
  • 渲染器原理
  • TypeScript 笔记
  • 技术文档
  • GitHub技巧
  • 博客搭建
  • 网站
  • 资源
  • Vue资源
  • 友情链接
  • 分类
  • 标签
  • 归档
  • 友链
  • 关于
GitHub (opens new window)

xujian

劝君惜取少年时。
首页
  • JavaScript
  • CSS
  • HTML和浏览器
  • Vue
  • Vue3
  • React
  • 基础知识
  • webpack
  • rollup
  • vite
  • 其他
  • Nodejs
  • 网络
  • TypeScript
  • 架构设计
  • 性能优化
  • 数据结构和算法
  • JavaScript教程 笔记
  • ES6 教程 笔记
  • TypeScript 从零实现 axios
  • Git学习 笔记
  • 渲染器原理
  • TypeScript 笔记
  • 技术文档
  • GitHub技巧
  • 博客搭建
  • 网站
  • 资源
  • Vue资源
  • 友情链接
  • 分类
  • 标签
  • 归档
  • 友链
  • 关于
GitHub (opens new window)
  • Nodejs

  • 网络

  • TypeScript

  • 架构设计

    • 发布订阅&观察者
    • 性能优化

    • 数据结构和算法

    • 进阶
    • 架构设计
    xujian
    2021-11-21

    发布订阅&观察者

    # 观察者设计模式:

    我认为大多数人都会同意观察者模式是学起来最好入门的,因为你从字面意思就能知道它主要是做什么的。

    观察者模式 在软件设计中是一个对象,维护一个依赖列表,当任何状态发生改变自动通知它们。

    看吧,即使是维基百科的定义 (opens new window) ,也不是很难, 对吧? 如果你还不清楚,我举个列子你就明白了。

    我们假设你正在找一份软件工程师的工作,你对“香蕉公司”很感兴趣。所以你联系了他们的 HR,给了 HR 你的联系电话。如果有任何职位空缺都会通知你。这里还有几个候选人也和你一样对“香蕉公司”感兴趣。所以职位空缺大家都会被通知,如果你回应了他们的通知,他们就会联系你面试。

    这个例子和“观察者模式”有什么关系呢?这里的“香蕉公司”就是Subject,用来维护Observers(和你一样的候选人),为某些Event(比如职位空缺)来Notify(通知)观察者。

    是不是很简单!?

    img

    所以,如果你想在你的软件或者应用中实现观察者模式,你可以遵循上图这个流程。(我不想在我的文章中写任何代码,因为网上有数不清的例子)

    # 发布-订阅设计模式

    在观察者模式中的Subject就像一个发布者(Publisher),观察者(Observer)就是订阅者(Subscriber)。Subject通知观察者(Observer)就像发布者(Publisher)通知他的订阅者(Subscriber)。所以很多书和文章使用发布-订阅概念来解释观察者设计模式。但是这里还有另外一个流行的模式叫做发布-订阅设计模式。它的概念和观察者模式非常类似。最大的区别是:

    img

    在发布-订阅模式,消息的发送方,叫做发布者(publishers),消息不会直接发送给特定的接收者,叫做订阅者(Subscriber)。

    意思就是发布者和订阅者不知道对方的存在。需要一个第三方组件,叫做信息中介,它将订阅者和发布者串联起来,它过滤和分配所有输入的消息。换句话说,发布-订阅模式用来处理不同系统组件的信息交流,即使这些组件不知道对方的存在。

    那么如何过滤消息的呢?事实上这里有几个过程,最流行的方法是:基于主题以及基于内容。好了,就此打住,如果你感兴趣,可以去维基百科了解。 (opens new window)

    img

    发布-订阅模式(图片来源: MSDN 博客 (opens new window))

    所以,我用下图表示这两个模式最重要的区别:

    img

    图片来源: developers-club (opens new window)

    有感觉了吗?

    我们把这些差异快速总结一下:

    • 在观察者模式中,观察者是知道Subject的,Subject记录了所有的观察者。然而,在发布订阅模式中,发布者和订阅者不知道对方的存在。它们只有通过消息代理进行通信。
    • 在发布订阅模式中,组件是松散耦合的,正好和观察者模式相反。
    • 观察者模式大多数时候是同步的,比如当事件触发,Subject就会去调用观察者的方法。而发布-订阅模式大多数时候是异步的(使用消息队列)。
    • 观察者模式需要在单个应用程序地址空间中实现,而发布-订阅更像交叉应用模式。

    尽管它们之间有区别,但有些人可能会说发布-订阅模式是观察者模式的变异,因为它们概念上是相似的。

    ok,我想说的说完了,希望你get到了,感谢您的阅读,如果发现有什么错误或者需要修改的地方,请在下方留言,谢谢

    提示

    发布订阅是发消息到朋友圈跟刷朋友圈,观察者是把消息群发给相关的人

    作者:缪宇
    链接:https://juejin.cn/post/6844903513009422343

    编辑 (opens new window)
    #发布订阅#观察者
    上次更新: 2022/05/22, 18:34:11
    TS类型推导
    浏览器渲染原理与性能优化

    ← TS类型推导 浏览器渲染原理与性能优化→

    最近更新
    01
    😍Vue3和React都在用的函数式编程,学起来~
    02-03
    02
    链表
    11-24
    03
    基础类型
    11-18
    更多文章>
    Theme by Vdoing | Copyright © 2020-2023 xujian | MIT License
    • 跟随系统
    • 浅色模式
    • 深色模式
    • 阅读模式