美文网首页
设计模式:发布订阅模式, 观察者模式

设计模式:发布订阅模式, 观察者模式

作者: San十二 | 来源:发表于2018-11-23 00:32 被阅读0次

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

发布订阅并不是观察者模式。但我觉得没有必要细究这个……同样的思路不同的写法而已。另外看了这么久,我还是没懂订阅、发布、观察这三个词是什么意思……

发布订阅模式

发布订阅的核心是调度中心;是指由一个中心来进行事务的发布和订阅;就像Node中的Event模块。
使用的方式如下:

var event = new Event();

//订阅消息
event.on("test", function () {
  console.log("发布消息");
});

// 触发
event.emit("test");

要实现这样一个发布订阅模式是非常简单的;当然是实现一个简陋版本的……

var Event = function () {
  this.events = {};
}

Event.prototype.on = function (task, callback) {
  var list = this.events[task];
  list ? list.push(callback) : list = [callback];
}

Event.prototype.emit = function (task) {

  var events = this.events;

  if (!events[task]) {
    return false;
  }

  for (var i = 0; i < events.length; i++) {
    events[i]();
  }
}

观察者模式

观察者模式与发布订阅模式不同的是,观察者模式一般有两个模块,发布者和订阅者(从这点听更应该叫发布/订阅模式才对啊……真的是)。简单来讲就是分化为两个模块,发布者订阅观察者并手动触发事件,观察者定义事件。

class Subject {
  constructor() {
    this.observerList = []
  }
  addObserver(observer) {
    this.observerList.push(observer)
  }
  notify(params) {
    this.observerList.forEach(observer => {
      observer.update(params)
    })
  }
}

// 观察者类
class Observer {
  constructor(fn) {
    this.update = fn
  }
}

相关文章

网友评论

      本文标题:设计模式:发布订阅模式, 观察者模式

      本文链接:https://www.haomeiwen.com/subject/dwkdqqtx.html