订阅发布模式/观察者模式

2020-05-18  本文已影响0人  练习时长2年半的个人练习生
定义

手写一个订阅发布模式

   class Event {
      constructor() {
         this.listener = {}
      }
      on() {
         let key = Array.prototype.shift.apply(arguments)
         let fns = arguments
         if (key in this.listener) {
            this.listener[key].push(fns[0])
            return
         }
         this.listener[key] = [fns[0]]
      }

      emit() {
         let key = Array.prototype.shift.apply(arguments);
         console.log(this.listener[key])
         for (let cd of this.listener[key]) {
            cd()
         }
      }
   }

   let event = new Event()
   let f1 = function () {
      console.log('点击了')
   }
   let f2 = function () {
      console.log('点击了22222')
   }
   event.on('click')

   event.on('click')
   event.emit('click')

click 事件有两个订阅者(f1,f2),当emit后,两个订阅者得到通知。
这就是最简单发布/订阅模式。

const Event = require('events')
let event = new Event.EventEmitter();
function dirtyTalk(name){
   console.log(`${name},oh,yes,oh,Yes!`)
}
event.on('fuck',dirtyTalk)

setTimeout(function() { 
   event.emit('fuck','jack');   
}, 1000); 
上一篇 下一篇

猜你喜欢

热点阅读