中介者模式是一种行为型设计模式,它的主要目的是降低对象之间的耦合度,将对象之间的交互行为集中管理和控制,从而简化对象之间的通信过程。
在软件开发中,当一个系统中的对象之间存在复杂的交互关系时,对象之间的通信往往会变得非常混乱和复杂。这时候,引入一个中介者来协调和管理对象之间的交互,可以将复杂的网络结构转化为一个中心调度的模式,简化代码结构并提高系统的可维护性和可扩展性。
中介者模式中的核心组件是中介者(Mediator),它负责定义对象之间的通信协议,并控制对象之间的交互过程。每个对象通过与中介者进行通信来实现与其他对象的交互,而不是直接与其他对象进行通信。
下面是一个简单的示例,展示了如何使用介者模式:
// 定义一个中介者接口 public interface Mediator { void send(String message, Colleague colleague); } // 定义一个抽象同事类 public abstract class Colleague { protected Mediator mediator; public Colleague(Mediator mediator) { this.mediator = mediator; } public abstract void send(String message); public abstract void receive(String message); } // 具体同事类A public class ConcreteColleagueA extends Colleague { public ConcreteColleagueA(Mediator mediator) { super(mediator); } public void send(String message) { mediator.send(message, this); } public void receive(String message) { System.out.println("Colleague A received message: " + message); } } // 具体同事类B public class ConcreteColleagueB extends Colleague { public ConcreteColleagueB(Mediator mediator) { super(mediator); } public void send(String message) { mediator.send(message, this); } public void receive(String message) { System.out.println("Colleague B received message: " + message); } } // 具体中介者类 public class ConcreteMediator implements Mediator { private ConcreteColleagueA colleagueA; private ConcreteColleagueB colleagueB; public void setColleagueA(ConcreteColleagueA colleagueA) { this.colleagueA = colleagueA; } public void setColleagueB(ConcreteColleagueB colleagueB) { this.colleagueB = colleagueB; } public void send(String message, Colleague colleague) { if (colleague == colleagueA) { colleagueB.receive(message); } else if (colleague == colleagueB) { colleagueA.receive(message); } } } public class MediatorPatternDemo { public static void main(String[] args) { ConcreteMediator mediator = new ConcreteMediator(); ConcreteColleagueA colleagueA = new ConcreteColleagueA(mediator); ConcreteColleagueB colleagueB = new ConcreteColleagueB(mediator); mediator.setColleagueA(colleagueA); mediator.setColleagueB(colleagueB); colleagueA.send("Hello, colleague B!"); colleagueB.send("Hi, colleague A!"); } }
在这个示例中,Mediator接口定义了中介者的方法,Colleague抽象类定义了同事类的基本行为。ConcreteColleagueA和ConcreteColleagueB是具体的同事类,它们通过与中介者进行通信来实现与其他同事类的交互。ConcreteMediator是具体的中介者类,它实现了中介者接口,并负责控制和协调同事类之间的交互过程。
通过引入中介者,对象之间的通信变得更加简单和灵活,同时也降低了对象之间的耦合度。这种模式在复杂的系统和多个对象之间的协作中非常有用。
本文固定URL:https://www.dotcpp.com/course/1380