JavaScript - 观察者与发布订阅者模式
August 31, 2024
5 min read
#观察者模式
- 观察者模式是一种行为型设计模式,它定义了一种一对多的依赖关系,当一个对象的状态发生改变时,其所有
依赖者
都会收到通知并自动更新。 - 当对象间存在一对多关系时,则使用观察者模式(Observer Pattern)。比如,当一个对象被修改时,则会自动通知依赖它的对象。观察者模式属于行为型模式。
- 可以看作
拍卖场景
,拍卖师观察最高标价,然后通知给其他竞价者竞价。
- 观察者和被观察者是抽象耦合的,实现简单,主题和观察者之间的关系明确,适用于一对多的关系。
- 当观察者较多时,主题的通知机制可能会导致性能问题,因为每个观察者都会被直接通知。
具体实现
观察者javascript
12345678class Observer {constructor(name) {this.name = name}update(data) {console.log(`观察者${this.name} 收到了: ${data}`)}}
被观察者javascript
1234567891011121314class Subject {constructor() {this.observers = []}add(observer) {this.observers.push(observer)}notify(data) {this.observers.forEach((i) => i.update(data))}delete(observer) {this.observers = this.observers.filter((i) => i !== observer)}}
具体使用
一个栗子javascript
123456789101112131415const sub = new Subject()const observer1 = new Observer('A')const observer2 = new Observer('B')sub.add(observer1)sub.add(observer2)sub.notify('一条新闻')// 观察者A 收到了: 一条新闻// 观察者B 收到了: 一条新闻sub.notify('今天的天气是晴天')// 观察者A 收到了: 今天的天气是晴天// 观察者B 收到了: 今天的天气是晴天sub.delete(observer1)