minhuaF / blog

I will write my front-end story.
9 stars 1 forks source link

设计模式- 订阅发布模式 #4

Open minhuaF opened 6 years ago

minhuaF commented 6 years ago

前言

早上看笔试题目时,看到有一个阿里的笔试题目

实现一个EventEmitter类,这个类包含以下方法: on(监听事件,该事件可以被触发多次) once(也是监听事件,但只能被触发一次) fire(触发指定的事件) off(移除指定事件的某个回调方法或者所有回调方法)

class EventEmitter {
  /**请补充你的代码***/
}
const event = new EventEmitter()
const drank = (person) => {
  console.log(person + '喝水')
}
event.on('drank', drank)
event.on('eat', (person) => {
  console.log(person + '吃东西')
})
event.once('buy', (person) => {
  console.log(person + '买东西')
})
event.fire('drank', '我')   // 我喝水  
event.fire('drank', '我')   // 我喝水  
event.fire('eat', '其它人')   // 其它人吃东西
event.fire('eat', '其它人')   // 其它人吃东西
event.fire('buy', '其它人')  //其它人买东西
event.fire('buy', '其它人')  //这里不会再次触发buy事件,因为once只能触发一次
event.off('eat')  //移除eat事件
event.fire('eat', '其它人')  //这里不会触发eat事件,因为已经移除了

根据提供这个题目的作者描述,这是一个订阅发布模式的题目。故收集下来,并巩固下这个模式的用法。

订阅发布模式

订阅发布模式定义的是一对多的关系,让多个订阅者同时监听某个发布者对象;这个发布者对象在自身状态发生变化时会通知所有订阅者,使他们能更新对应的状态。