观察者
该设计模式的思想比如:Vue监听data中的数据改变后更新视图,Vue里面的Watcher等
观察者模式,首先要有一个被观察者,被观察者里面存放被观察数据,一旦数据改变(因此需要一个改变数据的方法),则告知所有观察者。观察者可以通过注册的方式注册到被观察者身上。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
| class Subject { constructor() { this.state = 100 this.observers = [] } addObservers(...args) { this.observers.push(...args) } setState(s) { let oldValue = this.state this.state = s this.observers.forEach(o => { o.update(this.state, oldValue) }) } }
class Observer { constructor(name) { this.name = name } update(newValue, oldValue) { console.log(`${oldValue}->${newValue}`); } }
const s = new Subject() const d = new Observer('医生') const n = new Observer('护士') s.addObservers(d, n) s.setState(2)
|