发布-订阅模式

ESP32 开发实战:VS Code 头文件波浪线及编译错误的终极解决方案 本文针对ESP32开发者在VS Code中常见的头文件红色波浪线和fatal error编译错误,提供了终极解决方案。通过详细讲解如何配置c_cpp_properties.json文件来修复编辑器智能提示,以及如何修改CMakeLists.txt来修正编译器路径,帮助开发者彻底解决环境配置问题,提升开发效率。 阅读详情

1. 基本概念

发布-订阅模式是一种设计模式,用于实现对象之间的松散耦合。在这种模式下,发布者和订阅者之间并不直接通信,而是通过中介者来进行交流

  • 发布者publisher:负责发布事件或消息给中介者
  • 订阅者subscriber:订阅事件或消息,并在事件发生时被通知
  • 中介者(主题或事件总线):负责管理订阅者和发布者之间的关系,并在事件发生时通知所有订阅者

特点:

  • 松散耦合:通过中介者进行通信,系统更容易维护和扩展
  • 异步通信:发布者可以随时发布事件,订阅者可以在准备好时接收和处理这些事件
  • 多对多关系:一个事件可以有多个订阅者,一个订阅者可以订阅多个事件

2. 手写

class EventCenter {
    constructor () {
        // 事件中心
        this.events = {}
    }
    /**
     * 订阅事件
     * @param {string} eventName - 事件名称
     * @param {function} callback
     * @memberof EventCenter
     */
    subscribe (eventName, callback) {
        // 确保当前 eventName 在事件中心是唯一的
        if (!this.events[eventName]) {
            // 创建事件容器
            this.events[eventName] = []
        }
        // 存放事件
        this.events[eventName].push(callback)
    }
    /**
     * 取消订阅
     * @param {string} eventName
     * @param {function} callback
     * @return {*}
     * @memberof EventCenter
     */
    unSubscribe(eventName, callback) {
        // 事件中心里面没有这个事件
        if (!this.events[eventName]) {
            return new Error('not find event' + eventName)
        }
        // 只有事件名没有提供callback  删除对应事件名的所有订阅者(即事件数组)
        if (!callback) {
            delete this.events[eventName]
        } else {
            // 找到索引
            const index = this.events[eventName].findIndex((el) => el === callback)

            if (index !== -1) {
                return new Error('not find callback')
            }
            // 移除事件下的某个函数
            this.events[eventName].splice(index, 1)
            // 查看事件容器是否为空 如果为空就移除事件
            if (this.events[eventName].length === 0) {
                delete this.events[eventName]
            }
        }
    }

    /**
    * 触发事件
    * @param {string} eventName
    * @param {Array} args
    * @return {*}
    * @memberof EventCenter
    */
   dispatch (eventName, ...args) {
    if (!this.events[eventName]) {
        return new Error('not find event' + eventName)
    }
    // 触发事件
    this.events[eventName].forEach((el) => {
        el(...args) // 调用每个订阅者的回调函数
    })
   }
}

// Test
const eventCenter = new EventCenter()
// 订阅事件
eventCenter.subscribe('click', (x, y) => {
    console.log(`clicked at (${x}, ${y})`);
})
// 发布事件
eventCenter.dispatch('click', 10, 20) // output:clicked at (10, 20)
virtuoso--DFF 27-实验课-std_cell2 阅读详情

相关推荐

5个企业级SOC平台横向对比:IBM QRadar vs Splunk vs 奇安信NGSOC

本文深度对比了IBM QRadar、Splunk和奇安信NGSOC等五大企业级SOC平台的核心能力,从架构设计、威胁检测、运营效率、成本模型和行业适配度五个维度进行解析。文章特别强调安全运营中心(SOC)在现代企业中的关键作用,并提供了实战数据和优化建议,帮助企业选择最适合自身需求的SOC解决方案。

a1b2c的博客 664

设计模式|发布-订阅模式(Publish-Subscribe Pattern)

发布-订阅模式(Publish-Subscribe Pattern)是一种软件架构设计模式,属于行为型设计模式,用于解耦生产者(发布者)和消费者(订阅者)之间的关系。在这种模式中,发布者负责发布消息,而订阅者则可以选择订阅他们感兴趣的消息类型。当有新消息发布时,订阅者将收到通知并执行相应的操作。

weixin_44435110的博客 2万+

手把手教你用U盘给海信IP501H刷机:GK6323V100C芯片的4.4.2和9.0固件实战

本文详细介绍了海信IP501H电视盒子基于GK6323V100C芯片的刷机实战指南,涵盖Android 4.4.2强刷和Android 9.0免拆刷机两种方案。从工具准备、短接操作到ADB调试,提供全流程解析和常见问题解决方案,帮助用户安全高效地完成刷机操作。

lemon的博客 1458

发布订阅者模式

方法,当发布者通知订阅者时,该方法会被调用。对象,并将它们订阅到发布者对象上。方法,发布一条消息,这时两个订阅者的。在主程序中,创建了一个发布者对象。方法会被调用,并输出相应的信息。数组,用于存储订阅者对象。方法用于订阅一个订阅者,方法用于通知所有订阅者。是两个具体的订阅者类。

yutimes的博客 825

别再乱按F8了!Win10系统修复的正确姿势:用管理员CMD运行sfc /scannow

本文详细介绍了Windows 10系统修复的正确方法,重点推荐使用管理员CMD运行`sfc /scannow`命令。相比传统的F8键和重装系统,这一方法更高效且安全,能解决大多数系统文件损坏问题。文章还提供了管理员CMD的启动方式、sfc命令的完整参数解析以及实战故障排除流程图,帮助用户快速恢复系统健康。

weixin_29218963的博客 463

Anomalib实战:从零开始构建自定义数据集的异常检测模型

本文详细介绍了如何使用Anomalib 2.1.0从零开始构建自定义数据集的异常检测模型。通过实战演示,指导读者准备符合规范的数据集结构,快速上手训练Patchcore等先进算法,并完成模型推理与调优,为工业质检、医疗影像等场景提供高效的视觉异常检测解决方案。

weixin_29165465的博客 109

发布订阅模式

定义:发布订阅模式(Publish-Subscribe Pattern)是一种软件架构模式,用于实现一对多的依赖关系,其中一个对象(称为发布者)将消息发送给多个订阅者。在发布订阅模式中,发布者和订阅者之间是解耦的,发布者不需要知道订阅者的存在,订阅者也不需要直接与发布者交互。当发布者有新消息时,它将消息发送给一个中介(称为消息代理或事件总线),然后该中介将消息广播给所有订阅者。这种模式在解耦组件、实现事件驱动架构、异步通信等方面非常有用,常见应用场景包括消息队列、事件处理系统、UI框架等。

weixin_47818125的博客 718

ESP32-BLE学习1-建立简单的server

start 学习之前,我想尝试使用ESP32的demo建立一个简单的server与手机接进行最基本的数据通信。 这里有BLE的简单讲解BLE资料 因为BLE的连接是具有主从机特性的,就像SPI,USB一些请求只能由主机端发起,连接也需要主机端发起。所以手机要想连上ESP32,就得将ESP32设置为从机模式。 从资料上可以看到,从机端通过Notify通知主机,所以从机就是GATT Server。 在进行ESP32 的demo学习之前,得大体看下ESP32的蓝牙组成,ESP32支持经典蓝牙和低功耗蓝牙4.2,

Spark的博客 1843

Redis的发布订阅模式详解

Redis 发布订阅(pub/sub)是一种消息通信模式:发送者(pub)发送消息,订阅者(sub)接收消息。Redis 的 SUBSCRIBE 命令可以让客户端订阅任意数量的频道, 每当有新信息发送到被订阅的频道时, 信息就会被发送给所有订阅指定频道的客户端。

埃泽漫笔 1307

OpenCV-Python图形图像处理:自用的一些工具函数源代码

本文为《OpenCV-Python图形图像处理:博主自用的一些工具函数功能及调用语法介绍》内容配套函数的源代码。

老猿Python 2495

华为MetaERP的交易计税模块(即“税务引擎”)在设计上确实受到Oracle E-Business Tax(EBTax)等国际先进税务架构理念的影响,但结合了华为自身全球化运营、多准则合规、高并发处

华为MetaERP税务引擎在借鉴Oracle EBTax三层架构基础上,创新升级为五层智能税务架构,实现从"税码驱动"到"场景+规则+AI驱动"的转变。该模块采用云原生微服务架构,支持全球190+国家税务规则动态加载,具备实时计税、多准则并行处理、AI风险预警等核心能力,深度适配金税工程等国内合规要求。通过税务数字孪生、RPA机器人等创新,形成自主可控的智能税务中枢,为跨国企业提供全栈国产化税务解决方案,重新定义ERP税务管理范式。

金牌架构师 114

Java实现发布订阅模式

发布订阅模式是软件开发者很常见的一种设计模式,很多开源库都使用了发布订阅模式,例如RxJava、EventBus、Vue等,所以学习该模式还是很有必要的。 该模式中存在一个或多个发布者,一个或多个订阅者,当发布者发布消息的时候,参与订阅的订阅者会收到对应的消息通知。其实核心原理就是使用一个集合来存储所有的订阅者类,当发布消息的时候遍历这个集合,并调用集合中的每一个订阅者类的通知方法。

renzhongrui的博客 1万+

2026年职业院校技能大赛中职移动应用与开发—数字生活APP原型设计参考答案(含素材)

本模块以产品原型为目标,考查参赛选手熟练收集、分析和归纳客户需求,清晰梳理业务流程,熟练使用UI设计软件进行产品UI/UE设计,掌握正确的UI配色方案,设计出符合业务逻辑的人体工学移动App 原型优秀作品。

我是网络安全兼技能大赛工程师,专注网络安全技术学习与技能大赛实战!持续分享最新的技术文章,帮你少走弯路,一起在技术赛道上进步~ 569

C++发布订阅模式

发布订阅模式

youaremyalllove的博客 3287

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

发布—订阅模式

为更好地理解 vue 的双向数据绑定原理,大致了解了一下发布订阅模式的实现。

TKOP_的博客 2074

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Java中使用发布订阅模式

发布订阅者模式概述使用意图使用场景与MVC模式之间的关系逻辑方法展示代码演示 概述 发布订阅者模式其实在意图上等同于观察者模式,但是在结构上又有所不同。 在意图上,两者都是为对象创建一对多的关联关系,并且在对象发生改变之后通知其他对象。在结构上,观察者模式只有对象和观察者,发布订阅模式中存在 发布者、订阅者以及中间的调度中心。 使用意图 发布订阅者模式可以为对象创建一对多的关系,并在发布者发生改变时通知其订阅者。 使用场景 发布订阅者使用场景较为广泛,如今我们使用的消息中间件,如 Rocket MQ ,

David_TD的博客 3923

发布订阅模式理解

发布订阅模式理解 1.发布-订阅模式 发布订阅模式是一种一对多的对象对应关系,多个观察者同时监听某一个对象,当该对象发生改变时,就会执行一个发布事件,这个发布事件会通知所有的事件订阅者,事件订阅者根据得到的数据进而改变自己的状态。 一个完整的发布订阅模式,由发布者、订阅者和消息管理器组成。 2.发布订阅模式的实现思路 1)创建一个发布者对象,并在其上添加一个列表属性,用于存放订阅者的回调函数 2...

weixin_38208314的博客 1436

前端中的订阅发布模式

订阅发布模式

程序员蜡笔熊的博客 1565

逐步深入发布-订阅模式

发布-订阅模式又叫观察者模式,它定义对象间的一对多的关联关系,当一个对象发生改变,与其关联的对象也会得到通知。 一、现实实例 无论是现实世界还是代码世界,观察者模式都有广泛的应用。 小明最近看上了一套房子,到了售楼处才被告知,该楼被售罄,好在该工作人员告诉小明,不久后还有一部分尾盘推出,开发商正在办理相关手续,当手续办理完成就可以购买。但没有人知道手续多久办理完成,于是小明记下了售楼处的电话,小明每天都会询问售楼处是否可以购买。除了小明,还有小红,小刚,小王每天都会向售楼处询问这个问题。在一周过后,售楼处的

weixin_44206561的博客 2169

浅谈JS发布订阅模式

在使用前端各大框架时,多多少少会使用过或听说过发布订阅模式,本篇文章将使用原生实现一个简单的发布订阅模式,并演示其在中进行跨组件通信的作用简单来说其实是一种对象间一对多的依赖关系,当一个对象的状态发送改变时,所有依赖于它的对象都将得到状态改变的通知。把自己想订阅的事件处理函数注册到统一的中,当向调度中心发布数据时,由统一调用注册到的事件处理函数。代码如下: 代码解释:对象即是我们创建的调度中心,里面含有两个函数,一个是订阅函数(),一个是发布函数(),并含有一个存放订阅者事件处理函数的数组()。发布订阅模式

前端之行,任重道远! 8653

观察者模式与订阅发布模式的区别

观察者模式有一个别名叫“发布-订阅模式”,或者说是“订阅-发布模式”,订阅者和订阅目标是联系在一起的,当订阅目标发生改变时,逐个通知订阅者。我们可以用报纸期刊的订阅来形象的说明,当你订阅了一份报纸,每天都会有一份最新的报纸送到你手上,有多少人订阅报纸,报社就会发多少份报纸,报社和订报纸的客户就是上面文章开头所说的“一对多”的依赖关系。观察者模式有两个重要的角色,即目标和观察者。A就是发布者,你是订阅者,微博就是调度中心,你和A是没有直接的消息往来的,全是通过微博来协调的(你的关注,A的发布动态)。

6098

观察者模式和发布订阅模式

观察者(Observer),又称发布-订阅(Publish-Subscrice),属于23中设计模式之一。发布订阅模式定义了一种一对多的依赖关系,让多个订阅者对象同时监听某一个主题对象。这个主题对象在自身状态变化时,会通知所有订阅者对象,使它们能够自动更新自己的状态。

三冬暖 3105

发布订阅模式代码实现

发布订阅模式简介:订阅者(Subsciber)通过事件注册(Subscribe)将订阅事件提交到调度中心(Topic),调度中心保存好订阅者的注册信息(回调函数),每当发布者(Publisher)发布事件的时候,通过事件发布(Publish)将发布的消息提交到调度中心,然后调度中心统一处理订阅者注册该事件的消息(执行注册时的回调函数)。 show me the code: //创建...

chenjycm的博客 2593
上一篇: git常见使用
下一篇: vue项目的性能优化
ZoeLandia
博客等级 码龄6年 734粉丝 183原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值