当前位置: 首页 > news >正文

常见的设计模式

1. 事件发射器

是一种 发布-订阅 (publish,subcription) 模型的实现

事件中心、事件发射器

本质是Map存储 事件名→回调函数集合

这样彼此都不知道对方存在,都是被 事件中心 单向关联,实现解耦

{ "data": [fn1, fn2], "click": [fnA], "error": [fnX, fnY, fnZ] }

on 注册:将函数放入集合

emit 遍历集合,依次执行回调

emit(eventName, payload) { for (const fn of listeners[eventName]) { fn(payload); } }

截图工具多语言中的事件发射器

2. 观察者模式

被观察者状态变化时通知所有观察者,触发update

之间通过 subjects 通信,需要维护观察者列表并实现 广播,即调用观察者的 update 回调,所以解耦合得并不是很彻底

// 被观察者:维护状态 + 维护观察者 class Subject { constructor() { this.observers = []; this.state = null; } setState(value) { this.state = value; this.notify(value); } addObserver(observer) { this.observers.push(observer); } removeObserver(observer) { this.observers = this.observers.filter(o => o !== observer); } notify(value) { this.observers.forEach(observer => observer.update(value)); } } // 观察者:需要有 update 方法 class Observer { update(value) { console.log("收到更新:", value); } } // 使用 const subject = new Subject(); const obs1 = new Observer(); const obs2 = new Observer(); subject.addObserver(obs1); subject.addObserver(obs2); subject.setState(123); // 输出:两次 “收到更新:123”

还有例如 useForm 中对表单状态 _formState 更新后通知相关组件的实现就是内部维护了一个观察者subjects

http://www.jsqmd.com/news/92954/

相关文章:

  • 学会Excel这四组快捷键,批量操作不在话下,告别熬夜加班必备
  • 2025 年 12 月粉碎机厂家权威推荐榜:万能/超微/高速/涡轮多机型深度解析,揭秘高效粉碎核心科技与选购指南 - 品牌企业推荐师(官方)
  • 基于SpringBoot的东方红食品公司采购管理系统的设计与实现_usr5txay
  • 10个会议减碳妙招,让企业环保又省钱
  • 2025 年 12 月一次性喉罩厂家权威推荐榜:覆盖成人/儿童/急救/麻醉多场景,精选无菌安全与高效通气口碑之选 - 品牌企业推荐师(官方)
  • Python打日志
  • 数学建模优秀论文算法-线性混合效应模型
  • 19、深入探索 Azure 存储:表、队列、文件和 Blob
  • 网页前端如何利用JS实现100G文件分块上传?
  • 15、IPMI驱动与直接内存访问(DMA)技术详解
  • 2025年国内检定器行业领军企业TOP榜,数显高强回弹仪/红外分光光度计/非金属板厚度测定仪/贯入式砂浆强度检测仪检定器供应厂家找哪家 - 品牌推荐师
  • 20、深入探索 Azure 存储与事件中心服务
  • 立煌-AUO友达15.4寸高亮液晶屏幕G154UAM01.0车载规格模组
  • 基于springboot的家庭相册影像管理系统的设计与实现_192n2568
  • 26、Linux内核维护全攻略
  • 6、网络安全威胁与防护策略
  • JS利用分片技术实现视频文件秒传与续传的原理?
  • 36、gawk调试与算术运算全解析
  • CVE-2023-25194 漏洞分析:Apache Kafka Connect 远程代码执行漏洞
  • CVE-2023-25194 漏洞分析:Apache Kafka Connect 远程代码执行漏洞
  • 盲埋孔 PCB:电子设备小型化的隐形助攻,这些优势太能打
  • AI+隧道管廊巡检|诚芯智联“空地一体”方案引领智能化变革
  • 16、FreeBSD 中的直接内存访问与存储驱动详解
  • HTML如何设计跨平台大文件分块上传的交互界面?
  • 阿里云 Tair 联手 SGLang 共建 HiCache,构建面向“智能体式推理”的缓存新范式
  • 8、延迟执行与虚拟零调制解调器驱动解析
  • 数学建模优秀论文算法-遗传算法
  • 2025 年 12 月吸塑除尘设备厂家权威推荐榜:专业解决吸塑托盘/食品包装/医疗器械/新能源电池盖板高效除尘难题 - 品牌企业推荐师(官方)
  • 别拿agent骗人说自己是model
  • 45、awk编程与gawk扩展:全面解析与应用指南