- 发布-订阅模式其实是一种对象间一对多的依赖关系,当一个对象的状态发送改变时,所有依赖于它的对象都将得到状态改变的通知
- 三个角色
- 订阅者
- 调度中心(平台)
- 发布者
例如:学生订阅课程,订阅者是学生,调度者是平台,发布者是课程管理员。 代码实现
// 使用对象来记录相关信息
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号要开课了!')