发布-订阅者模式

2022-03-19  本文已影响0人  Poppy11

什么是发布-订阅者模式

代码

 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)

上一篇 下一篇

猜你喜欢

热点阅读