观察者模式
当对象间存在一对多关系时,则使用观察者模式(Observer Pattern)。比如,当一个对象被修改时,则会自动通知依赖它的对象。
观察者与发布订阅模式的不同
- 观察者模式只有两个角色,发布订阅模式多了中间管理者
- 观察者和被观察者之间是松耦合关系,发布者和订阅者之间完全不存在耦合关系
- 发布订阅模式的系统更加庞大适用于较大的系统,观察者模式适用于单个应用内部
实现代码
// 目标者类
class Subject {
constructor() {
this.observers = [];
this.message = {}
}
// 添加
add(observer) {
this.observers.push(observer)
}
// 删除
remove(observer) {
let idx = this.observers.findIndex(item => item === observer)
idx > -1 && this.observers.splice(idx, 1)
}
// 通知收到消息
notify(message) {
for (let observer of this.observers) {
observer.update(message,)
}
}
}
// 观察者类
class Observer {
constructor(name) {
this.name = name
this.message = ''
}
// 触发发送消息
update(message) {
this.message = message
console.log('name:'+this.name + ' message:'+ this.message)
}
}
// 实例化一个目标者
let newSub = new Subject()
// 实例化观察者,并通知消息
let obs1 = new Observer('toy')
let obs2 = new Observer('tom')
newSub.add(obs1)
newSub.add(obs2)
newSub.notify('你好')
// 打印结果
// name:toy message:你好
// name:tom message:你好
发布订阅模式的实现:js实现发布订阅模式