常见的设计模式

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

相关推荐
方也_arkling3 分钟前
Element Plus主题色定制
javascript·sass
电商API_180079052475 分钟前
第三方淘宝商品详情 API 全维度调用指南:从技术对接到生产落地
java·大数据·前端·数据库·人工智能·网络爬虫
晓晓莺歌7 分钟前
vue3某一个路由切换,导致所有路由页面均变成空白页
前端·vue.js
2601_9498095925 分钟前
flutter_for_openharmony家庭相册app实战+我的Tab实现
java·javascript·flutter
Up九五小庞36 分钟前
开源埋点分析平台 ClkLog 本地部署 + Web JS 埋点测试实战--九五小庞
前端·javascript·开源
摘星编程1 小时前
React Native + OpenHarmony:UniversalLink通用链接
javascript·react native·react.js
qq_177767371 小时前
React Native鸿蒙跨平台数据使用监控应用技术,通过setInterval每5秒更新一次数据使用情况和套餐使用情况,模拟了真实应用中的数据监控场景
开发语言·前端·javascript·react native·react.js·ecmascript·harmonyos
烬头88211 小时前
React Native鸿蒙跨平台应用实现了onCategoryPress等核心函数,用于处理用户交互和状态更新,通过计算已支出和剩余预算
前端·javascript·react native·react.js·ecmascript·交互·harmonyos
程序员清洒3 小时前
Flutter for OpenHarmony:Text — 文本显示与样式控制
开发语言·javascript·flutter
雨季6664 小时前
Flutter 三端应用实战:OpenHarmony 简易“动态内边距调节器”交互模式深度解析
javascript·flutter·ui·交互·dart