什么是发布-订阅者模式
- 发布—订阅模式又叫观察者模式,它定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都将得到通知。
- 举个例子,售楼处卖房,那么售楼处要发布房型信息,那么它是发布者,中介关注房型,所以中介是订阅者,当售楼处发布消息之后或者房型信息更新之后,中介就会收到消息,去做某件事情,而这个事情就是去通知客户。这么做的好处是:客户不用关心房型,不用和任何一家售楼处保持紧密的联系,只需要与某个中介联系,但是他可以通过中介知道所有房型的变化。所有客户与售楼处是没有耦合关系的。
代码
- 首先我们需要维护一个消息队列。
- 用户可以订阅,取消订阅,以及消费
class Observer {
constructor() {
this.message = {}
}
on(messageName, fn) {
if (!this.message[messageName]) {
this.message[messageName] = []
}
this.message[messageName].push(fn)
}
off(messageName, fn) {
if (!fn) {
delete this.message[messageName]
return
}
if(!this.message[messageName]) return
this.message[messageName] = this.message[messageName].filter(message => message !== fn)
}
emit(messageName) {
if (!this.message[messageName]) {
throw new Error(`消息队列没有${messageName}`)
}
this.message[messageName].forEach(message => {
message()
})
}
}
function handleA(){
console.log("handleA")
}
const person1 = new Observer()
person1.on("liam", handleA)
person1.on("liam", () => {
console.log("触发回调1")
})
person1.off("liam", handleA)
person1.emit("liam")
console.log(person1)
网友评论