首页 > 其他分享 >事件总线(发布订阅者模式)

事件总线(发布订阅者模式)

时间:2023-09-05 16:45:18浏览次数:44  
标签:订阅 tasks name age cache 总线 模式 let fn

点击查看代码
class EventEmitter {
constructor() {
this.cache = {}
}
on(name, fn) {
if (this.cache[name]) {
this.cache[name].push(fn)
} else {
this.cache[name] = [fn]
}
}
off(name, fn) {
let tasks = this.cache[name]
if (tasks) {
const index = tasks.findIndex(f => f === fn || f.callback === fn)
if (index >= 0) {
tasks.splice(index, 1)
}
}
}
emit(name, once = false, ...args) {
if (this.cache[name]) {
// 创建副本,如果回调函数内继续注册相同事件,会造成死循环
let tasks = this.cache[name].slice()
for (let fn of tasks) {
fn(...args)
}
if (once) {
delete this.cache[name]
}
}
}
}

测试

点击查看代码
let eventBus = new EventEmitter()
let fn1 = function(name, age) {
console.log(`${name} ${age}`)
}
let fn2 = function(name, age) {
console.log(`hello, ${name} ${age}`)
}
eventBus.on('aaa', fn1)
eventBus.on('aaa', fn2)
eventBus.emit('aaa', false, '布兰', 12)
// '布兰 12'

// 'hello, 布兰 12'

标签:订阅,tasks,name,age,cache,总线,模式,let,fn
From: https://www.cnblogs.com/wan-cb/p/17680081.html

相关文章

  • 【23种设计模式】桥接模式(七)
    前言【桥接模式】是【结构型】设计模式的第二个模式,也有叫【桥模式】的,英文名称:BridgePattern。大家第一次看到这个名称会想到什么呢?我第一次看到这个模式根据名称猜肯定是连接什么东西的。因为桥在我们现实生活中经常是连接着A地和B地,再往后来发展,桥引申为一种纽带,比如:丝绸之......
  • 解耦---组件模式
    优点:1、代码复用,对比。2、通过使用组件容器对象,可以降低组件之间得耦合。缺点:1、组件之间通信比较复杂。 组件之间通信方式:1、组件容器对象保存组件需要的状态优点:组件之间可以直接从容器对象获取所需要的数据,降低组件之间的耦合缺点:当使用相同的组件容器,但是使......
  • Node 配合 webseket 订阅 pgsql 的数据表变化
    pg订阅传送门服务端代码const{Client}=require('pg');constWebSocket=require('ws');constwss=newWebSocket.Server({port:8080,perMessageDeflate:false,verifyClient:(info,cb)=>{constorigin=info.origin||'......
  • 数据艺术,成就科学现代的全面预算管理模式
    在信息化时代的今天,数据分析不仅仅是企业和个人需要掌握的技能,也成为了艺术与科学的结合。数据科学的发展之快,将企业推向了市场经济竞争的风口浪尖,通过数据分析来了解企业未来发展动向要求企业拥有更好的成熟度。数据是触及运营业务的关键驱动因素,这需要大数据思维和能力,来成就更加......
  • 互联网医院|医疗系统新模式改善看病效率
    伴随着互联网时代的进步,医疗也在不断的发展,越来越多的医院和诊所开始使用医疗软件。医疗软件广泛的被使用着,软件几乎覆盖了我们的日常生活。在我们日常生活当中健康一直是需求专业渠道,医疗软件开发会把用户的数据打造出一个数据库,从而医生看到这些数据就可以来评价用户的身体健康程......
  • 思科无线:将⼀个AP转换为ME模式(思科 Mobility Express、内嵌在AP上的无线控制器 )
    (转)思科无线:将⼀个AP转换为ME模式(思科MobilityExpress、内嵌在AP上的无线控制器)将⼀个AP转换为ME模式 思科MobilityExpress概述(内嵌在AP上的无线控制器功能)这是一种嵌入在思科Aironet®1560、1815W、1815I、1830、1850、2800和3800系列802.11acWave2无线接入点......
  • 趣步卷轴模式系统开发思路介绍和部分源码
    卷轴模式任务的设计来源这里说一下卷轴模式的历史演变,最早的思路是从一些资源管理类的游戏诞生的,例如在一些资源采集模拟培养类的游戏中,涉及到木材,矿石,水银,水晶,黄金资源的建设投入,城镇内建筑生成和升级需要特定数量的资源,招募不同等级的兵种和英雄也需要特定的资源,甚至在战略类......
  • Java实现多种单例模式
    packagecom.java3y.austin.test.Mode;importjava.util.HashSet;importjava.util.concurrent.atomic.AtomicBoolean;//饿汉式单例classSingleton1{privateSingleton1(){}privatestaticfinalSingleton1singleton1=newSingleton1();publ......
  • 单例设计模式
    单例设计模式基本介绍类的单例设计模式,就是采取一定的方式保证在整个的软件系统中,对某个类只能有一个对象实例存在,且类提供一个静态方法,用以获取该对象。例如Hibernate的SessionFactory,它是sql会话工厂,这个对象一定是很重的(创建需要加载很多资源和时间),一般情况下,只需要一个Se......
  • 动手实践-AT模式的读写隔离问题
         ......