中介者模式(Mediator Pattern)是一种行为型设计模式,它通过封装一组对象之间的交互,来减少对象之间的直接耦合。中介者模式通过引入一个中介者对象,将对象之间的通信转化为与中介者的交互,从而降低了对象之间的依赖关系。
在中介者模式中,对象之间的通信通过中介者进行,而不是直接相互调用。中介者对象负责协调和控制对象之间的交互,它封装了对象之间的通信逻辑,使得对象之间的关系更加松散。
中介者模式通常包括以下组件:
中介者模式可以简化对象之间的通信,减少了对象之间的直接耦合。它将对象之间的交互逻辑集中在中介者对象中,使得系统更加灵活和可维护。中介者模式常用于复杂的对象交互场景,如图形界面、多人游戏等。
import java.util.ArrayList;
import java.util.List;
// 抽象中介者
interface Mediator {
void sendMessage(String message, Colleague colleague);
}
// 具体中介者
class ConcreteMediator implements Mediator {
private List<Colleague> colleagues;
public ConcreteMediator() {
colleagues = new ArrayList<>();
}
public void addColleague(Colleague colleague) {
colleagues.add(colleague);
}
public void sendMessage(String message, Colleague colleague) {
for (Colleague c : colleagues) {
if (c != colleague) {
c.receiveMessage(message);
}
}
}
}
// 同事类
abstract class Colleague {
protected Mediator mediator;
public Colleague(Mediator mediator) {
this.mediator = mediator;
}
public abstract void send(String message);
public abstract void receiveMessage(String message);
}
// 具体同事类
class ConcreteColleague extends Colleague {
public ConcreteColleague(Mediator mediator) {
super(mediator);
}
public void send(String message) {
System.out.println("发送消息:" + message);
mediator.sendMessage(message, this);
}
public void receiveMessage(String message) {
System.out.println("收到消息:" + message);
}
}
// 客户端代码
public class Main {
public static void main(String[] args) {
ConcreteMediator mediator = new ConcreteMediator();
Colleague colleague1 = new ConcreteColleague(mediator);
Colleague colleague2 = new ConcreteColleague(mediator);
mediator.addColleague(colleague1);
mediator.addColleague(colleague2);
colleague1.send("Hello, colleague2!");
colleague2.send("Hi, colleague1!");
}
}
在上述示例中,我们定义了抽象中介者(Mediator)接口和具体中介者(ConcreteMediator)类。同事类(Colleague)是中介者模式中的参与者,其中具体同事类(ConcreteColleague)实现了抽象同事类的方法。客户端代码创建了中介者对象和同事对象,并将同事对象添加到中介者中。同事对象通过中介者对象进行消息的发送和接收。
这个示例展示了如何使用Java实现中介者模式,通过中介者对象来协调和控制对象之间的交互。中介者模式可以减少对象之间的直接耦合,使系统更加灵活和可扩展。
在源码中,中介者模式有很多应用。以下是一些常见的源码中使用中介者模式的情况:
优点:
中介者模式通过引入中介者对象来解耦对象之间的关系,简化了对象的交互,提供了更灵活和可控的系统设计。然而,中介者对象的复杂性和系统的单点故障可能会带来一些问题。在使用中介者模式时,需要权衡其优缺点,确保合理使用。