一、发布订阅模式
    1、简介
    发布订阅模式又叫观察者模式,它定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都将得到通知。
    发布订阅模式有三个角色:发布者、订阅者、消息中心

    2、优点和缺点
    优点:发布—订阅模式的优点非常明显,一为时间上的解耦,二为对象之间的解耦。
    缺点:创建订阅者本身要消耗一定的时间和内存,而 且当你订阅一个消息后,也许此消息最后都未发生,但这个订阅者会始终存在于内存中。

    3、简单实现

    1. class PubSub {
    2. constructor() {
    3. // 创建一个事件池
    4. this.event = [];
    5. }
    6. // 订阅
    7. subscribe(func) {
    8. let flag = this.event.indexOf(func)
    9. flag === -1?this.event.push(func):null
    10. }
    11. // 移除订阅
    12. unSubscribe(func) {
    13. let index = this.event.indexOf(func);
    14. this.event.splice(index,1);
    15. }
    16. // 发布, 通知事件池中的方法,按照顺序执行
    17. publish(...args) {
    18. for (let i = 0; i < this.event.length; i++) {
    19. this.event[i].call(this,...args);
    20. }
    21. }
    22. }
    23. const util = new PubSub();
    24. let fn1 = function(){
    25. console.log(1);
    26. }
    27. let fn2 = function(){
    28. util.unSubscribe(fn1)
    29. console.log(2);
    30. }
    31. let fn3 = function(){
    32. console.log(3);
    33. }
    34. let fn4 = function(){
    35. console.log(4);
    36. }
    37. util.subscribe(fn1)
    38. util.subscribe(fn2)
    39. util.subscribe(fn3)
    40. util.subscribe(fn4)
    41. util.publish()

    4、解决数组塌陷问题