之后也许要进入一个用到这个模式的项目,于是来学习,学习资料是互联网。
1. first try
第一个看的是掘金的一篇文章,通过讲解观察模式与发布订阅模式的区别,让我有一个初步的了解。
-
观察者模式:有一个对象,被许多 observer 观察,当对象改变的时候,通过 notify 通知所有观察者这一改变。像是 MVC 架构里就常用,数据变化的时候,视图也变化。
-
pub/sub 模式:乍一看和观察者模式很像,有一个 pub,有很多 sub,但是区别在于 pub/sub 模式的两边之间没有直接通信。pub 并不会通知 sub。它们之间的联系是通过 broker 进行的(遇事不决加一层)。当 pub 发送消息的时候,比如说发送到了 broker 的 topic A 上,broker 会过滤 pub 的消息并分发给 sub,并不一定分发给所有的订阅者,而是只发送给订阅了 topic A 的订阅者。
2. 图解
如上图。
还可以参照这个 demo,加深理解。
- 可以看到,pub-sub 模式,一个订阅者可以订阅多个 topic,也可以多个订阅者订阅同一个话题。
- 此外,还可以看出,订阅者可以自由订阅和取消订阅。
3. 事件监听
实际上 js 中的 eventListener 也是一种 pub/sub 模式。