JavaScript - 观察者模式
实现一个 Subject 类,通知观察者
js
123456789101112131415class Subject { // 被观察者 constructor() { this.observers = [] } add(observer) { this.observers.push(observer) } notify(newMsg) { this.observers.forEach(i => i.update(newMsg)) } delete(observer) { this.observers = this.observers.filter(i => i !== observer) }}
实现一个 Observer 类,处理更新
js
123456789class Observer { // 观察者 constructor(name) { this.name = name } update(newMsg) { console.log(newMsg + "==> " + this.name + "收到了") }}
实例化一个被观察者
js
1let sub = new Subject()
实例化一个或多个观察者
js
12let observer1 = new Observer("观察者1")let observer2 = new Observer("观察者2")
用 add 方法进行绑定
js
12sub.add(observer1) // Observer1 观察 subsub.add(observer2) // Observer2 观察 sub
用 notify 方法进行通知
js
1234sub.notify("我是被观察者,我发布了第一个信息!") // sub 发布消息
// 我是被观察者,我发布了第一个信息!==> 观察者1收到了// 我是被观察者,我发布了第一个信息!==> 观察者2收到了
用 delete 方法进行解绑
js
12345sub.delete(observer1) // Observer1 取消观察 sub
sub.notify("我是被观察者,我发布了第二个信息!") // sub 发布消息
// 我是被观察者,我发布了第二个信息!==> 观察者2收到了