当前位置: 首页 > 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.cnnetsun.cn/news/62994.html

相关文章:

  • 如何创建自己的Gitee实现国内镜像
  • 27、大数据存储 - Azure 数据湖全面解析
  • docker部署n8n(AI工作流)
  • Claude Skills 深度解析:从 What、Why、How 构建领域专用 AI 能力
  • 网站被黑后的紧急处理恢复正常步骤是什么?
  • 30、Linux 打印系统全解析
  • MYSQL的学习
  • 8、延迟执行与虚拟零调制解调器驱动解析
  • 7、Linux 网络安全与防火墙配置全解析
  • 基于springboot和vue的校园二手书交易系统_w387km94
  • 基于SpringBoot的艺术作品展示平台 艺术家在线交流系统 关注z50di044
  • C#AI系列(6): C#离线实现高效OCR
  • 山东高校申请专利的难点
  • 淄博市发明专利与实用新型专利的转换
  • 基于Python的河南天气数据分析与可视化
  • 【Linux系统编程】(十五)揭秘 Linux 环境变量:从底层原理到实战操作,一篇吃透命令行参数与全局变量!
  • 轨道交通专业相关证书推荐
  • PaperXie AI毕业论文写作功能深度拆解:从选题到成稿,一个被低估的学术效率加速器如何重塑你的科研流程
  • 2026年,你希望公司更离不开你,还是你更离不开公司?
  • YOLOv10优化:注意力魔改 | 新颖的卷积轴向注意力和谱空间注意力助力涨点,适用高分辨率场景,2025.12
  • 35、gawk调试器命令全解析
  • 41、gawk扩展功能全解析
  • Java Web 核心全解析
  • 7、远程服务安全攻防全解析
  • 18、网络安全防护:psad与fwsnort的应用与集成
  • 30、深入探索fwknop:安全访问与防护机制详解
  • 31、编程技巧与实用程序解析
  • 38、深入探索 gawk 扩展开发:性能优化与功能定制
  • 数据结构之递归-如何巧妙利用递归函数的返回值
  • 46、深入探索编程符号、函数与操作:从基础到高级应用