设计模式-观察者模式

观察者

该设计模式的思想比如: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)