一、发布订阅模式
1、简介
发布订阅模式又叫观察者模式,它定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都将得到通知。
发布订阅模式有三个角色:发布者、订阅者、消息中心
2、优点和缺点
优点:发布—订阅模式的优点非常明显,一为时间上的解耦,二为对象之间的解耦。
缺点:创建订阅者本身要消耗一定的时间和内存,而 且当你订阅一个消息后,也许此消息最后都未发生,但这个订阅者会始终存在于内存中。
3、简单实现
class PubSub {constructor() {// 创建一个事件池this.event = [];}// 订阅subscribe(func) {let flag = this.event.indexOf(func)flag === -1?this.event.push(func):null}// 移除订阅unSubscribe(func) {let index = this.event.indexOf(func);this.event.splice(index,1);}// 发布, 通知事件池中的方法,按照顺序执行publish(...args) {for (let i = 0; i < this.event.length; i++) {this.event[i].call(this,...args);}}}const util = new PubSub();let fn1 = function(){console.log(1);}let fn2 = function(){util.unSubscribe(fn1)console.log(2);}let fn3 = function(){console.log(3);}let fn4 = function(){console.log(4);}util.subscribe(fn1)util.subscribe(fn2)util.subscribe(fn3)util.subscribe(fn4)util.publish()
4、解决数组塌陷问题
