参考答案:
观察者模式:一个对象(观察者)订阅另一个对象(主题),当主题被激活的时候,触发观察者里面的事件。
发布订阅模式:订阅者把自己想要订阅的事件注册到调度中心,当发布者发布事件到调度中心(就是该事件被触发),再由调度中心统一调度订阅者注册到调度中心的处理代码。
对比一下:
可以发现两种模式下的角色数量不一样:
从使用场景上:
Vue 响应式系统
Object.defineProperty
,Vue 3 使用 Proxy
实现数据劫持表单验证
自定义事件系统
1class Subject { 2 constructor() { 3 this.observers = []; 4 } 5 addObserver(observer) { 6 this.observers.push(observer); 7 } 8 notify(data) { 9 this.observers.forEach(observer => observer.update(data)); 10 } 11}
Intersection Observer API
全局事件总线
1// Vue 中的实现 2const EventBus = new Vue(); 3// 发布 4EventBus.$emit('event-name', data); 5// 订阅 6EventBus.$on('event-name', callback);
Redux/Vuex 状态管理
WebSocket 消息处理
微前端通信
DOM 事件系统
1document.addEventListener('click', handler); // 订阅 2element.dispatchEvent(new Event('click')); // 发布
特性 | 观察者模式 | 发布订阅模式 |
---|---|---|
耦合度 | 较高(直接引用) | 较低(通过中间件) |
灵活性 | 较低 | 较高 |
实现复杂度 | 简单 | 相对复杂 |
典型应用 | Vue 响应式、表单验证 | 事件总线、状态管理 |
性能影响 | 直接调用,性能较好 | 需要查找订阅者,稍慢 |
最近更新时间:2025-07-18
题库维护不易,您的支持就是我们最大的动力!