前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【Rxjs】Rxjs_观察者模式和发布订阅模式

【Rxjs】Rxjs_观察者模式和发布订阅模式

作者头像
CloudCat
发布2019-05-26 11:08:59
1.1K0
发布2019-05-26 11:08:59
举报

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

设计模式

捡起大学所学的《设计模式》吧 Orz

观察者模式和发布订阅模式特别容易被人们混淆,很多书里面也将这两个概念混为一谈,所以首先要搞清楚这两种模式的区别。

观察者模式

代码语言:javascript
复制
╭─────────────╮  Fire Event  ╭──────────────╮
│             │─────────────>│              │
│   Subject   │              │   Observer   │
│             │<─────────────│              │
╰─────────────╯  Subscribe   ╰──────────────╯
观察者模式
观察者模式

观察者其模式实很好理解,模式中只有两种角色,观察者和被观察者。

观察者模式属于行为型模式,用于建立一种对象与对象之间的依赖关系,一个对象发生改变时将自动通知其他对象,其他对象将相应作出反应。

Subject(目标) 目标又称为主题,它是指被观察的对象。

Observer(观察者) 观察者将对观察目标的改变做出反应

代码例子:jQuery

代码语言:javascript
复制
  function refresh() {
    $('div').empty().text('you are stupid.')
    $('div').trigger('refresh')
  }
  ...
  $('div').on('refresh', () => {
    $('span').empty().text('go to find it.')
  })

发布-订阅模式

代码语言:javascript
复制
 ╭─────────────╮                 ╭───────────────╮   Fire Event   ╭──────────────╮
 │             │  Publish Event  │               │───────────────>│              │
 │  Publisher  │────────────────>│ Event Channel │                │  Subscriber  │
 │             │                 │               │<───────────────│              │
 ╰─────────────╯                 ╰───────────────╯    Subscribe   ╰──────────────╯
发布订阅模式
发布订阅模式

发布订阅模式属于广义上的观察者模式

发布订阅模式与观察者模式非常接近,仅仅只是多了一个中间层用于管理消息(信息通道),可以看成是一种优化的观察者模式。

生活中有一个很好的例子——广播电台,人们会把频道调到他们最喜欢的节目。广播站不知道观众听得是什么或者他们正在听什么,只需要发布他们的节目就可以了。而观众也不知道广播站制作节目的过程,他们只要在他们最喜欢的节目运行的时候把台调到对应的频道或者告知朋友就行。

观察者模式和发布-订阅模式的比较

两者的比较如下图所示:

观察者和发布订阅模式的比较
观察者和发布订阅模式的比较

观察者模式

  • 必须知道具体的 Subject,两者可以直接联系
  • 紧耦合
  • 大多数是同步的
  • 在单个应用程序地址空间中实现

发布订阅模式

  • 无直接依赖关系,通过消息代理
  • 松耦合
  • 大多数是异步的(使用消息队列)
  • 交叉应用模式

参考链接《对象间的联动——观察者模式(二) - 设计模式之行为型模式 - 极客学院 Wiki》 《设计模式:发布/订阅模式解析 - 记录技术的点滴 - SegmentFault 思否》 《观察者模式和发布订阅模式有什么不同? - 知乎》

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Rxjs_观察者模式和发布订阅模式
    • 设计模式
      • 观察者模式
      • 发布-订阅模式
      • 观察者模式和发布-订阅模式的比较
相关产品与服务
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档