JavaScript设计模式是基于语言特性的可复用组织思想,非语法特性;包括观察者模式(一对多依赖)、发布-订阅模式(通过事件总线解耦)、单例模式(闭包实现唯一实例)、工厂模式(灵活创建对象),重在适配JS特性与实际场景。

JavaScript 中的设计模式是解决常见编程问题的可复用结构化方案,不是语法特性,而是基于语言特性的组织思想。它利用 JS 的函数一等公民、闭包、原型链、事件机制等能力,让代码更易维护、扩展和协作。
观察者模式(Observer Pattern)
核心是实现对象间的一对多依赖关系:当一个对象状态改变,所有依赖它的对象自动收到通知并更新。JS 原生事件系统(如 addEventListener / dispatchEvent)就是典型应用,也可手动实现轻量级版本。
手动实现要点:
- 定义“被观察者”(Subject):维护订阅者列表,提供
subscribe、unsubscribe、notify方法 - 定义“观察者”(Observer):通常是带
update方法的对象或函数 - 避免内存泄漏:确保能取消订阅,尤其在组件销毁时(如 React 的
useEffect清理函数)
简单示例:
立即学习“Java免费学习笔记(深入)”;
class Subject {
constructor() {
this.observers = [];
}
subscribe(observer) {
if (typeof observer === 'function') {
this.observers.push(observer);
}
}
unsubscribe(observer) {
this.observers = this.observers.filter(fn => fn !== observer);
}
notify(data) {
this.observers.forEach(fn => fn(data));
}
}
// 使用
const subject = new Subject();
const logObserver = (msg) => console.log('收到:', msg);
subject.subscribe(logObserver);
subject.notify('Hello'); // 输出:收到: Hello
subject.unsubscribe(logObserver);
subject.notify('World'); // 无输出
登录后复制
发布-订阅模式(Pub/Sub)
观察者模式的升级版,引入事件总线(Event Bus),解耦发布者与订阅者。两者不直接持有对方引用,全部通过中心调度器通信,适合大型应用或跨模块通信。
关键区别:
标签: react javascript java js go proxy 区别
还木有评论哦,快来抢沙发吧~