js 观察者模式
2019-11-19 本文已影响0人
钢琴__
观察者模式定义了对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都将得到通知,并自动更新。观察者模式属于行为型模式,行为型模式关注的是对象之间的通讯,观察者模式就是观察者和被观察者之间的通讯。
观察者模式有一个别名叫“发布-订阅模式”,或者说是“订阅-发布模式”,订阅者和订阅目标是联系在一起的,当订阅目标发生改变时,逐个通知订阅者。我们可以用报纸期刊的订阅来形象的说明,当你订阅了一份报纸,每天都会有一份最新的报纸送到你手上,有多少人订阅报纸,报社就会发多少份报纸,报社和订报纸的客户就是上面文章开头所说的“一对多”的依赖关系。
代码实现
# observable 被观察者类
class Observable{
observes = new Set();
register(observer) {
this.observes.add(observer)
}
subscribe() {
[...this.observes].forEach(item => {
item.subscribe();
})
}
delete(item) {
this.observes.delete(item);
}
}
# 观察者类
class Observer {
name;
constructor(name) {
this.name = name;
}
subscribe() {
console.log(`${this.name}在 ${Math.random()} 触发了`)
}
}
const a = new Observable();
const b = new Observer('uu');
const c = new Observer('cc');
const d = new Observer('dd');
const e = new Observer('dd');
a.register(b);
a.register(d);
a.register(c);
a.register(e);
a.subscribe();
a.delete(b);
a.subscribe();