news 2026/5/29 1:37:39

【设计模式】行为型-中介者模式

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【设计模式】行为型-中介者模式

文章目录

  • 前言
  • 一、概念
  • 二、核心结构
  • 三、Java 代码实现(聊天室场景)
    • 1. 抽象中介者
    • 2. 抽象同事类(User)
    • 3. 具体中介者(聊天室)
    • 4. 具体同事(普通用户)
    • 5. 客户端
  • 四、核心变化
  • 五、优缺点
    • 优点
    • 缺点
  • 六、应用场景
  • 七、总结

前言

当一个系统中对象之间交互非常多、互相依赖错综复杂时,会形成一张“蜘蛛网”结构:A依赖B、B依赖C、C依赖A、D依赖所有人……这种网状耦合会让代码极难维护、扩展、调试。中介者模式就是用来把网状结构变成星型结构,让所有对象只和中介者通信,大幅降低耦合。


一、概念

中介者模式(Mediator Pattern)是一种行为型设计模式,核心思想:
用一个中介对象封装一系列对象之间的交互,使各个对象不需要显式相互引用,从而降低耦合,并且可以独立改变它们之间的交互。

简单理解:

  • 把多对多 → 变成一对多
  • 所有组件只认识中介者,不认识彼此
  • 交互逻辑全部集中在中介者

一句话总结:
取消网状依赖,统一由中介者调度。


二、核心结构

  1. Mediator(抽象中介者)
    定义同事对象通信接口。
  2. ConcreteMediator(具体中介者)
    协调各同事,维护所有同事引用,处理交互逻辑。
  3. Colleague(抽象同事)
    持有中介者引用。
  4. ConcreteColleague(具体同事)
    只和中介者通信,不直接交互。

三、Java 代码实现(聊天室场景)

场景:用户在聊天室发消息,不直接私聊对方,而是发给聊天室(中介者),由中介者转发。

1. 抽象中介者

publicinterfaceChatMediator{voidsendMessage(Stringmsg,Useruser);voidaddUser(Useruser);}

2. 抽象同事类(User)

publicabstractclassUser{protectedChatMediatormediator;protectedStringname;publicUser(ChatMediatormediator,Stringname){this.mediator=mediator;this.name=name;}publicabstractvoidsend(Stringmsg);publicabstractvoidreceive(Stringmsg);}

3. 具体中介者(聊天室)

importjava.util.ArrayList;importjava.util.List;publicclassChatRoomimplementsChatMediator{privateList<User>users=newArrayList<>();@OverridepublicvoidaddUser(Useruser){users.add(user);}@OverridepublicvoidsendMessage(Stringmsg,Usersender){for(Useru:users){// 不发给自己if(u!=sender){u.receive(sender.name+": "+msg);}}}}

4. 具体同事(普通用户)

publicclassChatUserextendsUser{publicChatUser(ChatMediatormediator,Stringname){super(mediator,name);}@Overridepublicvoidsend(Stringmsg){System.out.println(name+" 发送: "+msg);mediator.sendMessage(msg,this);}@Overridepublicvoidreceive(Stringmsg){System.out.println(name+" 收到: "+msg);}}

5. 客户端

publicclassClient{publicstaticvoidmain(String[]args){ChatMediatorroom=newChatRoom();Useralice=newChatUser(room,"Alice");Userbob=newChatUser(room,"Bob");Usertom=newChatUser(room,"Tom");room.addUser(alice);room.addUser(bob);room.addUser(tom);alice.send("大家好!");}}

输出:

Alice 发送: 大家好! Bob 收到: Alice: 大家好! Tom 收到: Alice: 大家好!

四、核心变化

  • 网状耦合(烂代码)
    A ↔ B ↔ C ↔ D 互相引用
  • 星型结构(中介者优化)
    A、B、C、D → 只 ↔ Mediator

五、优缺点

优点

  • 彻底简化多对多依赖
  • 集中控制交互逻辑,便于维护
  • 各组件解耦,可独立复用
  • 符合单一职责

缺点

  • 中介者可能过于庞大,变成“上帝类”
  • 复杂度转移到中介者

六、应用场景

  • 聊天室、群聊系统
  • GUI 组件交互(按钮、输入框、表单)
  • 调度中心、网关、控制器
  • 飞机调度塔、交通信号灯
  • 分布式事务协调器

经典源码:

  • Spring MVC DispatcherServlet(核心中介者)
  • Java AWT/Swing 事件机制
  • Netty EventLoop

七、总结

  1. 中介者模式 = 网状依赖 → 星型调度
  2. 核心:所有交互统一由中介者转发
  3. 结构:Mediator + Colleague
  4. 最适合:多对象复杂交互场景
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/23 2:08:06

从Java全栈到Vue3:一个程序员的实战面试故事

从Java全栈到Vue3&#xff1a;一个程序员的实战面试故事 在一次紧张又充满期待的面试中&#xff0c;我作为一位拥有5年经验的Java全栈开发工程师&#xff0c;迎来了与一家互联网大厂的面试。这次面试不仅是一次技术能力的检验&#xff0c;更是一次对项目经验、系统设计和团队协…

作者头像 李华
网站建设 2026/5/29 1:37:23

利用快马平台快速生成vmware17安装指南网页原型

今天想和大家分享一个快速生成技术文档原型的实用技巧。最近需要给团队整理一份VMware Workstation 17的安装指南&#xff0c;传统做法可能要花半天时间写文档&#xff0c;但这次我尝试用InsCode(快马)平台直接生成网页版指南&#xff0c;整个过程特别顺畅。 需求分析阶段 首先…

作者头像 李华
网站建设 2026/5/29 1:37:05

GameMode实时日志分析终极指南:如何快速调试优化过程中的问题

GameMode实时日志分析终极指南&#xff1a;如何快速调试优化过程中的问题 【免费下载链接】gamemode Optimise Linux system performance on demand 项目地址: https://gitcode.com/gh_mirrors/ga/gamemode GameMode是一款强大的Linux系统性能优化工具&#xff0c;能够根…

作者头像 李华
网站建设 2026/5/23 2:06:52

App-Installer:iOS设备IPA安装解决方案与技术实现深度解析

App-Installer&#xff1a;iOS设备IPA安装解决方案与技术实现深度解析 【免费下载链接】App-Installer On-device IPA installer 项目地址: https://gitcode.com/gh_mirrors/ap/App-Installer 对于iOS开发者和技术爱好者而言&#xff0c;如何在没有App Store访问权限的情…

作者头像 李华
网站建设 2026/5/23 2:06:51

3个方法实现P3C规则自定义与风险适配

3个方法实现P3C规则自定义与风险适配 【免费下载链接】p3c Alibaba Java Coding Guidelines pmd implements and IDE plugin 项目地址: https://gitcode.com/gh_mirrors/p3/p3c 副标题&#xff1a;面向不同项目场景的代码规范动态调整指南 一、问题引入&#xff1a;代码…

作者头像 李华