常见的设计模式

1. 事件发射器

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

事件中心、事件发射器

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

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

tsx 复制代码
{
  "data": [fn1, fn2],
  "click": [fnA],
  "error": [fnX, fnY, fnZ]
}

on 注册:将函数放入集合

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

tsx 复制代码
emit(eventName, payload) {
  for (const fn of listeners[eventName]) {
    fn(payload);
  }
}

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

2. 观察者模式

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

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

tsx 复制代码
// 被观察者:维护状态 + 维护观察者
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

相关推荐
码事漫谈26 分钟前
手把手带你部署本地模型,让你Token自由(小白专属)
前端·后端
ZC跨境爬虫31 分钟前
【爬虫实战对比】Requests vs Scrapy 笔趣阁小说爬虫,从单线程到高效并发的全方位升级
前端·爬虫·scrapy·html
爱上好庆祝31 分钟前
svg图片
前端·css·学习·html·css3
橘子编程43 分钟前
JavaScript与TypeScript终极指南
javascript·ubuntu·typescript
王夏奇1 小时前
python中的__all__ 具体用法
java·前端·python
叫我一声阿雷吧1 小时前
JS 入门通关手册(45):浏览器渲染原理与重绘重排(性能优化核心,面试必考
javascript·前端面试·前端性能优化·浏览器渲染·浏览器渲染原理,重排重绘·reflow·repaint
大家的林语冰1 小时前
《前端周刊》尤大开源 Vite+ 全家桶,前端工业革命启动;尤大爆料 Void 云服务新产品,Vite 进军全栈开发;ECMA 源码映射规范......
前端·javascript·vue.js
jiayong232 小时前
第 8 课:开始引入组合式函数
前端·javascript·学习
田八2 小时前
聊聊AI的发展史,AI的爆发并不是偶然
前端·人工智能·程序员
zhanghongbin012 小时前
AI 采集器:Claude Code、OpenAI、LiteLLM 监控
java·前端·人工智能