/* 观察者模式
+ 观察者模式通常又被称为发布订阅者模式(Publisher/Subscribers): 它定义了对象和对象间的一种
依赖关系, 只要当一个对象的状态发生改变时, 所有依赖于它的对象都得到通知并被自动更新, 解决了
主体对象与观察者之间功能的耦合.
+ 生活中观察者模式也是非常常见的, 比如订阅公众号, 订阅报纸, 订阅各种媒体等; 当被订阅的主体的状态
发生改变, 比如有新的消息, 就通知订阅者.
+ 观察者的使用场合就是: 当一个对象的改变需要同时改变其他对象, 并且它不知道具体有多少对象改变的时候,
就应该考虑使用观察者模式.
+ 各种原生事件, 自定义事件. vue源码
*/
// 以下是观察者模式在js中的简单实现
// 发布
class Publisher {
constructor() {
this._state = 0
this.substribers = []
}
get state() {
return this._state
}
set state(value) {
this._state = value
this.notify(value)
}
notify(value) {
this.substribers.forEach(substriber => {
substriber.update(value)
})
}
collect(substriber) {
this.substribers.push(substriber)
}
}
// 订阅
let subId = 1
class Substriber {
publisher = null
id = subId++
substribe(publisher) {
this.publisher = publisher
publisher.collect(this)
}
update(value) {
console.log(`我是${this.id}号订阅者, 收到发布者信息: ${value}`)
}
}
let publisher = new Publisher()
let substriber1 = new Substriber()
let substriber2 = new Substriber()
substriber1.substribe(publisher)
substriber2.substribe(publisher)
publisher.state = 2
观察者设计模式
最新推荐文章于 2024-10-16 11:03:19 发布