




JavaScript设计模式是解决特定问题的对象组织方式和协作关系,决定代码可维护性、可测试性与协作效率;单例确保全局唯一实例,工厂封装对象创建逻辑,观察者实现松耦合通信。JavaScript 设计模式不是语法糖,也不是框架专属功能,而是一套被反复验证过的、解决特定问题的**对象组织方式和协作关系**。它不改变代码能否运行,但直接决定你写出来的模块好不好改、好不好测、多人协作时别人能不能一眼看懂。
new DatabaseConnection() 不能随便写当你需要全局唯一资源(比如日志器、配置管理器、WebSocket 连接),每次 new 都会创建新实例,轻则浪费内存,重则导致状态错乱或连接泄漏。
const logger1 = new Logger(); const logger2 = new Logger(); —— 两个独立实例,日志可能写到不同文件或丢失上下文Logger.getInstance() 总返回同一个对象getInstance() 时创建,避免页面加载就占资源if (Logger.instance) return Logger.instance,否则 new 仍可绕过控制if/else 创建对象开始蔓延时就得收手你是不是写过这样的代码:if (role === 'admin') { return new AdminUser(); } else if (role === 'vip') { ... }?这种逻辑一旦散落在多个文件里,改一个角色就要全局搜、逐个修。
UserFactory.create('admin')
import() 动态导入,让工厂只加载当前需要的模块,避免打包体积膨胀factory.register('admin', AdminUser))解耦$emit 和 React 的自定义 Hook 背后都是它它解决的是「谁变了,谁通知,谁响应」的问题。不是所有通信都要用 Redux;两个组件之间状态联动,观察者往往更轻、更直接。
subscribe() 订阅、notify() 发布、observers 存回调this 指向错乱
EventBus 类封装,避免直接操作 document 或 window 自定义事件,方便单元测试