面试高频手写题006-实现发布订阅模式

发布订阅模式是一种设计模式,允许对象间建立一对多的关系,当发布者状态改变时通知所有订阅者。这种模式在JavaScript中常用于事件监听、React组件通信和Redux状态管理。通过一个简易的JS类Events,展示了如何实现发布、订阅和取消订阅的功能。
摘要由CSDN通过智能技术生成

一、发布订阅模式是什么

它其实是一种对象间一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都将得到状态改变的通知。

发布订阅模式的优点:解耦,通信双方不需要有任何的联系,只需要关注彼此的事件即可。

举个例子:比如微信公众号有很多个订阅者,有一个发布者,当发布者发布文章的时候,订阅者都可以收到发布的文章。此时微信公众号可以看做是一个调度中心,订阅者使用该调度中心的订阅功能(即关注公众号)进行订阅,管理员使用该调度中心的发布功能进行文章发布,当管理员发布文章后,订阅者就可以自动接收到。

二、使用场景

  • 事件监听:绑定事件处理函数,触发事件时进行回调

  • react组件之间通信:比如兄弟组件间传值,在子组件A中发布,在子组件B中订阅

  • redux状态管理插件使用了发布订阅模式

三、JS手写实现简易版发布订阅模式

class Events {
    constructor() {
        this.events = {}
    }
    // 发布
    emit(type, ...args) {
        const listeners = this.events[type] || []
        for(const listener of listeners) {
            listener && listener(...args)
        }
    }
    // 订阅
    on(type, listener) {
        this.events[type] = this.events[type] || []
        this.events[type].push(listener)
    }

    // 取消订阅
    off(type, listener) {
        this.events[type] = this.events[type] || []
        this.events[type] = this.events[type].filter(item => item !== listener)
    }

    // 仅在订阅后执行一次
    once(type, listener) {
        const callback = (...args) => {
            this.off(type, callback)
            listener(...args)
        }
        this.on(type, callback)
    }
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值