发布订阅者模式

人物:订阅者,发布者
订阅者:添加订阅者,存储订阅者
发布者:发布信息

1.添加订阅者,创建同类型容器(数组),存储同类型订阅者,同时将回调传入数组
2.发布者获取不同类型的容器(数组),进行循环,然后调用其回调,进行发布
 
    const obj = {
      // 存储订阅者
      userList: {},

      // 添加订阅者
      addUser (key, callBack) {
        const { userList } = this // 解构存储订阅者列表

        if (!userList[key]) { // 对不同类型的订阅者进行分类
          userList[key] = []
        }

        userList[key].push(callBack) // 订阅者传入的回调放入数组
      },

      // 发布者,给订阅者发布信息
      publish (key, opt) {
        const arr = this.userList[key] // 获取订阅者列表
        arr.forEach(item => { // 循环每一名订阅者的回调,进行调用(发布)
          item(opt)
        })
      }
    }

    // 添加订阅者
    obj.addUser('m20', opt => {
      console.log('小白:', opt)
    })

    obj.addUser('m20', opt => {
      console.log('小黑:', opt)
    })

    obj.addUser('m40', opt => {
      console.log('小黄:', opt)
    })

    // 订阅者发布信息
    obj.publish('m20', '1000万')

    obj.publish('m40', '2000万')
 
 
 
  
原文地址:https://www.cnblogs.com/fengxiana/p/13256538.html