与发布订阅模式比较
- 发布订阅模式 发布 和 订阅(中间存在第三方 arr) 发布和订阅之间没有任何关系
- 观察者模式 观察者和被观察者之间存在关联 (内部还是发布订阅)
观察者模式
class Subject {
name: string
state: string
observers: Observer[]
constractor(name) {
this.name = name
this.observers = []
this.state = '我现在很开心'
}
attach(o) {
this.observers.push(o)
}
setSatus(newState: string) {
this.state = newState
this.observers.forEach(o => 0.update(this))
}
}
class Observer {
name: string
constractor(name) {
this.name = name
}
update(baby: Subject) {
console.log(baby.name + '对' + this.name + '说' + baby.state)
}
}
const baby = new Subject('宝宝')
const o1 = new Observer('爸爸')
const o2 = new Observer('妈妈')
baby.attach(o1)
baby.attach(o2)
baby.setStatus('我不开心了')