概念
- 观察者模式是一种设计模式,也被称为发布 / 订阅者模式 或 事件模式;
- 用于在对象之间建立一种一对多的依赖关系,当发生改变时,所有依赖于它的对象都会得到通知并自动更新
- 如:DOM事件、vue / React 生命周期、各种异步回调 ~ 定时器、Promise.then、nodeJs 流式读取、端口监听
演示
- 被观察者(
Subject
)可以理解为饮品店的吧台 - 观察者(
Observer
): 可以理解为饮品店的顾客
class Subject {
private state = 0
private observers: Observer[] = []
getState() {
return this.state
}
setState(newState: any) {
this.state = newState
this.notify()
}
attach(ob: Observer) {
this.observers.push(ob)
}
deleteOb(ob: Observer) {
this.observers = this.observers.filter(item => item.id != ob.id)
}
private notify() {
for (let item of this.observers) {
item.update(this.state)
}
}
}
class Observer {
name: string
subject: Subject
id: string
constructor(subject: Subject, id: string, name: string) {
this.subject = subject
this.subject.attach(this)
this.id = id
this.name = name
}
update(state: number) {
console.log(`${this.name} 收到发布通知... ${state}`)
}
}
const sub = new Subject()
const o1 = new Observer(sub, '001', 'zhangsan')
const o2 = new Observer(sub, '002', 'lisi')
const o3 = new Observer(sub, '003', 'wangwu')
sub.deleteOb(o1)
sub.setState('hello')