发布订阅模式

# 发布订阅模式

# 前言

发布订阅模式作为日常开发中经常使用到的模式,小包一直不能做到很好的区分,前几天在听手写 promise 源码时,老师详细的讲解了两种模式,发现自己还是很难吃透。 今天我就用点小案例来帮助大家理解透彻 发布订阅模式

# 场景

假设我们想租一个房租,我们平时嘛,肯定没有精力也没有资源去找的,然后我们就需要借助中介公司来帮助我们寻找这样的房子。我们把要求罗列出来给到房产中介,中介会整理出来,贴在一个布告栏里。这时候条件合适的房东想出租房子就会通过中介找到我们,和我们交流信息,这就是大概的流程了

ReleaseSubscription1

# 代码实现

class EventBus{
  constructor(){
    this.events = {}
  }
  emit(key,task){//订阅
    if(!this.events[key]){
      this.events[key]=[]
    }
    this.events[key].push(task)
  }
  on(key,...args){//发布
    if(this.events[key]){
      this.events[key].forEach(fn =>fn(...args));
    }
  }
}

let event = new EventBus()//中介
event.emit('key1',(...arg)=>{//订阅
  console.log(arg);
})
event.emit('key2',(...arg)=>{//订阅
  console.log(arg);
})
event.on('key1','1','2',3)//发布
event.on('key2','key2')//发布

上次更新: 11 天前