js -day22-设计模式-发布订阅模式

53 阅读1分钟
  • 发布-订阅模式其实是一种对象间一对多的依赖关系,当一个对象的状态发送改变时,所有依赖于它的对象都将得到状态改变的通知
  • 三个角色
    • 订阅者
    • 调度中心(平台)
    • 发布者

例如:学生订阅课程,订阅者是学生,调度者是平台,发布者是课程管理员。 代码实现

// 使用对象来记录相关信息
const user = {}

// 大家需要报名课程,设置一个添加课程的方法
function add(type, fn){
   // 要给对象添加课程之前,需要先判断这个对象里面是否存在这个类型的课程

   // 表示没有这个类型就添加
   if(!user[type]){
       user[type] = []
   }
   // 如果有这个类型了,那么就添加进数组
   user[type].push(fn)
}

// 取消订阅
function cancel(type, fn){
   // 如果没有这个课程类型就终止执行
   if(!user[type]) return
   // 如果有这个课程类型就删除
   user[type] = user[type].filter(item=>{
       // handlerA != handlerA
       // handlerB != handlerA
       return item != fn
   })
}

// 发布课程信息
function emit(type, info){
   if(!user[type]) return
   user[type].forEach(item=>{
       item(info)
   })
}

function handlerA(info){
   console.log('王成报名了大前端课程!'+ info)
}
function handlerB(info){
   console.log('崔傑瑜报名了大前端课程!'+ info)
}
function handlerC(info){
   console.log('赵俊骏报名了java课程!'+ info)
}
add('HTML5', handlerA)
add('HTML5', handlerB)
add('java', handlerC)

// cancel('HTML5', handlerA)

emit('HTML5', '3月5号要开课了!')