news 2026/3/26 6:39:47

常见的设计模式

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
常见的设计模式

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

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/3/15 7:40:48

26、Azure SQL与Azure Data Lake:功能、安全与性能优化全解析

Azure SQL与Azure Data Lake:功能、安全与性能优化全解析 1. Azure SQL 入门 在完成 Azure SQL 数据库的配置并感到满意后,点击“创建”按钮,即可启动资源预配过程。完成后,可以通过“概述”页面访问基本信息。接下来,让我们深入了解 Azure SQL 的各项功能,以便更好地使…

作者头像 李华
网站建设 2026/3/22 9:23:49

23、深入了解Azure Service Bus:功能、开发与安全保障

深入了解Azure Service Bus:功能、开发与安全保障 1. Azure Service Bus实体类型 Azure Service Bus支持三种不同类型的实体,它们在处理通信时提供了不同的选择: - 队列(Queues) :是服务中最简单的实体。涉及的概念有: - 生产者(Producer) :向队列推送消息的…

作者头像 李华
网站建设 2026/3/25 10:31:37

15、Java开发综合要点解析

Java开发综合要点解析 1. Javadoc的使用 在Java开发中,为类的所有公共部分提供Javadoc API页面是很有必要的。Javadoc工具可生成这些页面,它与编译器有很多共享代码。 要创建Javadoc页面,需确保所有公共数据和方法都使用Javadoc风格的注释进行注释,然后在源代码上运行ja…

作者头像 李华
网站建设 2026/3/19 12:39:45

虾皮台湾店铺评分低会影响什么

在虾皮台湾站开店运营,商家间的竞争相当激烈,维护良好的店铺评分是长期经营的核心,务必提前投入关注,而不是等到出现问题才补救。那么,虾皮店铺评分偏低具体会带来哪些影响呢?我们一起来详细看看。 1、丧失…

作者头像 李华
网站建设 2026/3/24 11:34:14

rocketMq顺序消费,消费者线程数是否需要设置为1

讨论一、场景 1:误把 “线程数 1” 当成 “顺序消费” 的必要条件(认知误区)这是最核心的原因:很多人对 RocketMQ 顺序消息的底层逻辑理解不深,只记住了 “顺序消费要单线程”,却分不清「单个队列的单线程…

作者头像 李华
网站建设 2026/3/24 9:48:41

NVIDIA显卡设置疑难全攻略

导言 (Introduction)NVIDIA显卡的强大性能与广泛适用性。软件设置(驱动、控制面板、GeForce Experience)的重要性。目标:帮助用户系统性地排查和解决常见的非硬件故障的设置问题。适用读者:普通用户、游戏玩家、内容创作者。第一章…

作者头像 李华