当前位置: 首页 > news >正文

中介者模式和观察者模式的区别是什么

中介者模式和观察者模式都是行为设计模式,用于处理对象间的交互,但它们的设计理念和适用场景有显著区别:

核心思想差异

  • 观察者模式:建立一种一对多的依赖关系,当一个对象(被观察者)状态变化时,所有依赖它的对象(观察者)会自动收到通知并更新。
    例如:新闻订阅,报社(被观察者)发布新闻后,所有订阅者(观察者)都会收到报纸。

  • 中介者模式:通过引入一个中介者对象,将多个对象(同事)之间的交互集中管理,同事对象不再直接通信,而是通过中介者间接交互,实现多对多关系的解耦。
    例如:聊天室,用户(同事)之间不直接发消息,而是通过聊天室(中介者)转发。

交互方式差异

特性观察者模式中介者模式
交互方向单向(被观察者 → 观察者)双向(通过中介者实现多向交互)
通信方式被观察者主动通知观察者同事通过中介者间接通信
关系维护被观察者维护观察者列表中介者维护所有同事的引用
核心目的实现状态变化的自动传播集中管理复杂的多对象交互

代码结构差异

  • 观察者模式
    包含Subject(被观察者)和Observer(观察者)接口,Subject提供注册/移除观察者的方法,以及通知方法。

  • 中介者模式
    包含Mediator(中介者)和Colleague(同事)接口,Mediator定义协调同事交互的方法,同事通过中介者与其他同事通信。

适用场景差异

  • 观察者模式适合:

    • 一个对象状态变化需要触发多个对象更新(如事件监听机制)
    • 观察者数量动态变化(如订阅/取消订阅功能)
      典型案例:GUI控件的事件响应、消息通知系统
  • 中介者模式适合:

    • 多个对象之间存在复杂的交叉引用,导致依赖关系混乱
    • 需要集中控制多个对象的交互逻辑(如聊天室、游戏中的角色交互)
      典型案例:航空管制系统、聊天室、窗口管理器

总结

  • 观察者模式是 广播通知,强调一个源头触发多个响应;
  • 中介者模式是 集中调度,强调多对象通过中间层交互。

观察者模式解决的是对象与观察者的联动问题,而中介者模式解决的是多对象间的交互复杂性问题

http://www.dtcms.com/a/330615.html

相关文章:

  • 三同步舆情处置原则对政务管理有什么影响作用
  • 从实验室到落地:飞算JavaAI水位监测系统的工程化实践
  • 4.2 Vue3中reactive与ref详解及区别
  • 【企业架构】TOGAF概念之四(终结)
  • Day20 Linux 文件 I/O、目录操作及文件链接与 EDID
  • 小杰python(six day)——网络编程
  • 前端Vite介绍(现代化前端构建工具,由尤雨溪开发,旨在显著提升开发体验和构建效率)ES模块(ESM)、与传统Webpack对比、Rollup打包
  • 20250814 最小生成树总结
  • Vue 3 + TypeScript:package.json 示例 / 详细注释说明
  • Linux 上手 UDP Socket 程序编写(含完整具体demo)
  • 如何通过WiFi将文件从安卓设备传输到电脑
  • 计算机视觉(opencv)实战二——图像边界扩展cv2.copyMakeBorder()
  • 机器学习 - Kaggle项目实践(3)Digit Recognizer 手写数字识别
  • 分布式事务、锁、链路追踪
  • 读取数据excel
  • 高效TypeScript开发:VSCode终极配置指南
  • 待办事项小程序开发
  • (第十六期)HTML布局标签详解:div与span的深度解析
  • 【读代码】深度解析 context-engineering-intro:开源上下文工程实践原理与应用
  • 群晖 NAS 影音访问:通过 cpolar 内网穿透服务实现 Nastool 远程管理
  • java集合 之 多列集合
  • Python/Node.js 调用taobao API:构建实时商品详情数据采集服务
  • 使用HalconDotNet实现异步多相机采集与实时处理
  • Mybatis学习笔记(六)
  • 桥接模式C++
  • 成都国际影像产业园:接重庆五一职院实训就业考察
  • [系统架构设计师]软件工程基础知识(五)
  • 系统思考:转型困扰与突破
  • 【软考中级网络工程师】知识点之入侵检测深度剖析
  • 开源安全云盘存储:Hoodik 实现端到端数据加密,Docker快速搭建