在结构型设计模式中,有一个外观/门面(Facade)模式,它的作用是降低客户类与子系统内部各类的交互,相当于一个传达室,有客人来时直接与传达室交互,然后由传达室去系统内部为客人办理各种事务,这里中介者也起到类似的作用,但是它是在系统内部各个部门交流的枢纽,也即是说,系统内部不同部门之间就不要直接交互了,有消息传达的话都经过这个中介者帮它们去完成。GOF对Mediator的定义是:用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们
之间的交互。 下图是中介者模式的结构图:
中介者模式中,各个类的交互关系如下图表示:
也就是说,中介者对象是一组需要相互通信的对象的信息传达人,所有需要与其他对象通信的对象可以将信息传给中介者,然后由中介者帮它传信。根据上图可以得出如下代码:

1 abstract class Colleague{ 2 private Mediator mediator; 3 public Colleague(Mediator m){ 4 mediator=m; 5 } 6 public Mediator getMediator(){ 7 return mediator; 8 } 9 public abstract void action(); 10 public void change(){ 11 mediator.colleagueChanged(this); 12 } 13 } 14 class Colleague1 extends Colleague{ 15 public Colleague1(Mediator m){ 16 super(m); 17 } 18 public void action(){ 19 System.out.println("this is Colleague1::action()"); 20 } 21 public String toString(){ 22 return "colleague1"; 23 } 24 } 25 class Colleague2 extends Colleague{ 26 public Colleague2(Mediator m){ 27 super(m); 28 } 29 public void action(){ 30 System.out.println("this is Colleague2::action()"); 31 } 32 public String toString(){ 33 return "colleague2"; 34 } 35 } 36 abstract class Mediator{ 37 public abstract void colleagueChanged(Colleague c); 38 protected abstract void createConcreteColleague(); 39 } 40 class ConcreteMediator extends Mediator{ 41 private Colleague1 colleague1; 42 private Colleague2 colleague2; 43 public void colleagueChanged(Colleague c){ 44 System.out.println("发生改变的对象是:"+c); 45 c.action(); 46 if(c==colleague1){ 47 System.out.println("这里可以通知其他colleague执行相关任务,而不需要 "+c+" 本身去做通知"); 48 System.out.println("例如,通知colleague2做一些事情"); 49 colleague2.action(); 50 } 51 } 52 protected void createConcreteColleague(){ 53 colleague1=new Colleague1(this); 54 colleague2=new Colleague2(this); 55 } 56 public Colleague1 getColleague1(){ 57 return colleague1; 58 } 59 public Colleague2 getColleague2(){ 60 return colleague2; 61 } 62 } 63 64 public class Test{ 65 public static void main(String[] args) { 66 ConcreteMediator cm=new ConcreteMediator(); 67 cm.createConcreteColleague(); 68 Colleague1 c1=cm.getColleague1(); 69 Colleague2 c2=cm.getColleague2(); 70 cm.colleagueChanged(c1); 71 } 72 }
中介者模式的优点是:
1) 减少了子类生成Mediator将原本分布于多个对象间的行为集中在一起。改变这些行为只需生成Mediator的子类即可。这样各个 Colleague类可被重用。
2) 它将各Colleague解耦 Mediator有利于各Colleague间的松耦合. 你可以独立的改变和复用各Colleague类和Mediator类。
显著的缺点是:
它使控制集中化 中介者模式将交互的复杂性变为中介者的复杂性。 它比任何一个Colleague都复杂,这可能使得中介者自身成为一个难于维护的庞然大物。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?