简介
发布-订阅者模式也叫观察者模式。定义了一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖它的对象都会收到通知。
什么是发布-订阅者模式
以现实生活中一个事件为例,比如你要结婚了,作为消息发布者,打开通讯录,挨个打电话通知各个朋友结婚的消息。将这个过程抽象为:
- 发布者(你)
- 事件缓存列表(通讯录,朋友订阅了你的所有消息)
- 发布消息时候遍历事件缓存列表,依次触发订阅者的回调函数(挨个打电话)
- 此外,回调函数种可以添加其他的参数,比如告诉他们时间、地点。订阅者收到这些消息时可以进行不同的处理。
showCode
1 | // 发布者 |
- 这就是发布-订阅者的简单实现。订阅者会受到每一个发布的消息,如果他想收到他希望听到的消息,比如:李四的心理阴暗,他就想知道你失业了,就需要添加一个key,让订阅者订阅自己感兴趣的消息。
1 | let Mymsg = {} |
- 对于发布消息这个功能,针对其他人都有这个需要,所以将它提取成一个公共的方法进行封装。
1 | const event = { |
- 对于发布的消息,有时候订阅者也会取消订阅。比如:你和李四曾经是好朋友,因为一些事情决裂了,你将他从通讯列表中移除。所以在event中增加一个remove方法:
1 | remove: function(key, fn) { |
小结
- 发布订阅者模式的优点在于时间上和对象之间的解耦,在架构上MVVM有这种模式的参与,Vue也是基于该模式的。
- 而它的缺点在于,创建订阅者是需要消耗时间和内存的,并且订阅一个消息后,该消息最终并没有发生,而订阅者会始终存在于内存中。