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

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

核心思想差异

  • 观察者模式 :建立一种一对多 的依赖关系,当一个对象(被观察者)状态变化时,所有依赖它的对象(观察者)会自动收到通知并更新。

    例如:新闻订阅,报社(被观察者)发布新闻后,所有订阅者(观察者)都会收到报纸。

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

    例如:聊天室,用户(同事)之间不直接发消息,而是通过聊天室(中介者)转发。

交互方式差异

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

代码结构差异

  • 观察者模式

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

  • 中介者模式

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

适用场景差异

  • 观察者模式适合:

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

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

总结

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

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

相关推荐
南境十里·墨染春水15 天前
讲讲观察者模式
观察者模式
qq_2975746720 天前
设计模式系列文章(基础篇第19篇):中介者模式——封装交互关系,解耦网状依赖
设计模式·交互·中介者模式
故渊at25 天前
系列一:架构思想进阶 | 第3篇 SOLID 原则与设计模式实战:从“代码搬运工”到“架构师”的必经之路
观察者模式·设计模式·重构·架构·代理模式
狂人开飞机25 天前
18. 中介者模式(Mediator Pattern)
设计模式·c#·中介者模式
老码观察1 个月前
设计模式实战解读(四):观察者模式——事件驱动的解耦利器
观察者模式·设计模式·log4j
蜡笔小马1 个月前
15.C++设计模式-观察者模式
c++·观察者模式·设计模式
天若有情6731 个月前
自研极简C++软交互事件系统:干掉观察者模式、碾压前端事件机制
c++·观察者模式·交互·事件
c++之路1 个月前
观察者模式(Observer Pattern)
java·网络·观察者模式
++==1 个月前
设计模式:单例模式和观察者模式实现方式以及优化
观察者模式·单例模式·设计模式
雪度娃娃1 个月前
行为型设计模式——中介者模式
microsoft·设计模式·中介者模式