观察者模式?

是一种一对多的关系,当一个对象发生改变时,其他依赖者都会收到对应的通知并及时更新;

就比如说:现场拍卖,台上的是观察者,当商品价格发生改变时就会更新通知所有的竞拍者,其中一件商品对应了多个竞拍者,体现了一对多的关系;

可以参考如下图片:

x

简单案例

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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
class Observer {
constructor(name) {
this.name = name;
}

update(price) {
console.log(`${this.name} 您收到的价格为: $${price}`);
}
}

class Subject {
constructor() {
this.observers = []; // 所有竞拍者
this.price = 0; // 当前价格
}

// 添加竞拍者
addObserver(observer) {
this.observers.push(observer);
}

// 删除竞拍者
removeObserver(observer) {
this.observers = this.observers.filter(item => item !== observer);
}

// 更新价格 并通知所有竞拍者
updatePrice(price) {
this.price = price;
this.observers.forEach(item => item.update(price));
}
}

// 创建拍卖品
const subject = new Subject();

// 创建竞拍者
const ob1 = new Observer("竞拍者A");
const ob2 = new Observer("竞拍者B");
const ob3 = new Observer("竞拍者C");

// 注册竞拍者
subject.addObserver(ob1);
subject.addObserver(ob2);
subject.addObserver(ob3);

// 更新价格
subject.updatePrice(100);

// 竞拍者A离席不参与竞拍了
subject.removeObserver(ob1);

// 更新价格, 这时候只有竞拍者B,C收到通知
subject.updatePrice(200);