Print

JS中观察者模式与发布订阅模式区别对比


作者: 文章来源:

本文原地址:https://www.mimiwuqi.com/webqianduan/196013.html

目录文章目录
  1. 观察者模式
  2. 发布-订阅模式
  3. 二者区别
  4. 结语

最近,再重学 JavaScript 知识,对于观察者模式与发布订阅模式有了更深层次的了解,这也就是我们所说的“温故而知新”,今天我们来看看它们之间有哪些区别。

观察者模式

当对象之间存在一对多的依赖关系时,当被观察的对象状态发生改变时,所有观察它的对象都会收到通知,这就是观察者模式。

基本思想

在观察者模式中,只有两种主体:目标对象 (Subject) 和 观察者 (Observer)。
在观察者模式中,Subject 对象拥有添加、删除和通知一系列 Observer 的方法等,而 Observer 对象拥有 update 更新方法等。在 Subject 对象添加了一系列 Observer 对象之后,Subject 对象则维持着这一系列 Observer 对象,当有关状态发生变更时 Subject 对象则会通知这一系列 Observer 对象进行更新。

优点

实现

// 目标对象
class Subject {
  constructor() {
    this.observers = []
  }

  add (observer) {
    this.observers.push(observer)
  }

  notify() {
    this.observers.map(observer => {
      if (observer && typeof observer.update === 'function') {
        observer.update()
      }
    })
  }

  remove(observer) {
    const idx = this.observers.findIndex(itm => itm === observer)
    if (idx !== -1) {
      this.observers.splice(idx, 1)
    }
  }
}

// 观察者
class Observer {
  constructor(name) {
    this.name = name
  }

  update() {
    console.log(`${this.name} updated`)
  }
}

const subject = new Subject()
const o1 = new Observer('Nina')
const o2 = new Observer('Jack')

subject.add(o1)
subject.add(o2)

console.log('第一次通知:')
subject.notify()

subject.remove(o1)

console.log('删除 Nina 后,再次通知:')
subject.notify()

打印结果为:

JS中观察者模式与发布订阅模式区别对比 1

二者区别

结语

以上就是 javascript 中关于观察者模式与发布订阅模式区别,一点小小的学习总结,希望对大家有用。

更多 建站教程 请访问 https://www.mimiwuqi.com/webqianduan/