Appearance
观察者模式
观察模式是基于发布订阅模式 我们数据变化后可以自动通知触发发布 (vue 响应式原理)
javascript
class Subject { // 被观察者
constructor{
this._arr = []
this.state = '很开心'
}
attach(o){
this._arr.push(o) // 订阅
}
setSate(newState){
this.state = newState
// 宝宝状态变化了 会通知观察者更新 将自己传入过去
this._arr.forEach(o=>o.update(this)) // 发布
}
}
class Observer{ // 观察者
constructor(name){
this.name = name
}
update(s){
console.log(this.name + ':' + s.name + s.state)
}
}
let s = new Subject('宝宝') // 创建一个被观察者
let o1 = new Observer('爸爸')
let o2 = new Observer('妈妈')
s.attach(o1)
s.attach(o2)
s.setSate('有人打我了')
// 让 o1、o2绑定到 s 身上
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
33
34
35
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
33
34
35