设计模式之中介者模式
中介者模式,又称为调停者模式或调解者模式
1.中介者模式结构图
-
示例代码
// 抽象中介类 public abstract class Mediator { protected ConcreteColleagueA concreteColleagueA; protected ConcreteColleagueB concreteColleagueB; public void setConcreteColleagueA(ConcreteColleagueA concreteColleagueA) { this.concreteColleagueA = concreteColleagueA; } public void setConcreteColleagueB(ConcreteColleagueB concreteColleagueB) { this.concreteColleagueB = concreteColleagueB; } public abstract void methodA(); public abstract void methodB(); } // 具体中介类 public class ConcreteMediator extends Mediator{ public void methodA(){ concreteColleagueB.doWorkB(); } public void methodB(){ concreteColleagueA.doWorkA(); } } // 抽象同事类 public abstract class Colleague { protected Mediator mediator; public Colleague(Mediator mediator) { this.mediator = mediator; } } // 具体同事类A public class ConcreteColleagueA extends Colleague{ public ConcreteColleagueA(Mediator mediator) { super(mediator); } public void selfMethodA(){ mediator.methodA(); } public void doWorkA(){ System.out.println("具体处理对象A开始处理问题"); } } // 具体同事类B public class ConcreteColleagueB extends Colleague{ public ConcreteColleagueB(Mediator mediator) { super(mediator); } public void selfMethodB(){ mediator.methodB(); } public void doWorkB(){ System.out.println("具体处理对象B开始处理问题"); } } // 测试类 public class MediatorTest { public static void main(String[] args) { ConcreteMediator mediator = new ConcreteMediator(); ConcreteColleagueA colleagueA = new ConcreteColleagueA(mediator); ConcreteColleagueB colleagueB = new ConcreteColleagueB(mediator); mediator.setConcreteColleagueA(colleagueA); mediator.setConcreteColleagueB(colleagueB); colleagueA.selfMethodA(); } }
-
总结:
优点:由多对多关系转化为一对多,降低了类间的耦合,符合迪米特法则;
缺点:当同事类复杂较多时,中介者就会变得臃肿且不易维护.
-
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· winform 绘制太阳,地球,月球 运作规律
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· 写一个简单的SQL生成工具
· Manus的开源复刻OpenManus初探