发布者-订阅者模式是什么

发布者-订阅者模式是什么

发布订阅者模式是由订阅者,处理中心,发布者三部分组成;发布者-订阅者是一种一对多的关系,让多个订阅者对象同时监听一个发布者,当发布者状态改变时就会通知事件调度中心,由事件调度中心通知所有订阅自己的订阅者

例如:一个商店,商店的会员粉丝经常询问有没有什么活动,员工每次都需要对每一位会员单独回复,比较麻烦;建群/收集邮箱,有活动时统一发送信息/回复,会员:订阅者,商店:发布者,建群/邮箱:事件调度中心

在这里插入图片描述

发布者-订阅者实现

 class Publisher {
        constructor() {
            //调度中心
            this.subscribers = new Set()
            this.msg = "暂时没有新消息"
        }

        // 订阅事件的方法
        subscribe (subscriber) {
            this.subscribers.add(subscriber)
        }

        // 取消订阅的方法
        unsubscribe (subscriber) {
            this.subscribers.delete(subscriber)
        }

        // 发布通知的方法
        notify () {
            console.log("商店正在通知所有订阅者...")
            for (let subscriber of this.subscribers) {
                subscriber.update(this.msg)
            }
        }

        // 更新消息的方法
        updateMsg (newMsg) {
            console.log(`商店正在更新消息:${newMsg}`)
            this.msg = newMsg
            this.notify()
        }
    }

    class Subscriber {
        constructor(name) {
            this.name = name
        }

        // 接收更新的方法
        update (msg) {
            console.log(`${this.name} 收到更新啦!新消息内容:${msg}`)
        }
    }

    // 创建发布者实例
    const publisher = new Publisher()

    // 创建订阅者实例
    const subscriber1 = new Subscriber('小明')
    const subscriber2 = new Subscriber('小王')

    // 订阅事件,之后发布者更新消息会通知到这两个订阅者
    publisher.subscribe(subscriber1)
    publisher.subscribe(subscriber2)

    // 发布者更新消息后通知所有订阅者
    publisher.updateMsg('今天牛奶水果打八折!')

    // 取消订阅,之后发布者更新消息不会通知到该订阅者
    publisher.unsubscribe(subscriber1)

    // 发布者更新消息后通知所有订阅者(不包括已取消订阅的订阅者)
    publisher.updateMsg('今天牛奶水果已售空!')

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值