中介模式(Mediator Pattern)
中介模式(Mediator Pattern)是一种行为设计模式,它通过提供一个中介对象来封装一系列对象之间的交互,使得各个对象不需要显式地相互引用,从而降低对象之间的耦合度,并且可以独立地改变它们之间的交互。以下从多个方面详细介绍中介模式。
模式结构与角色
中介模式主要包含以下几个角色:
- 抽象中介者(Mediator):定义了中介者与各个同事对象之间的通信接口,通常包含一个或多个方法用于处理同事对象之间的交互。
- 具体中介者(Concrete Mediator):实现了抽象中介者接口,负责协调各个同事对象之间的交互,维护对各个同事对象的引用。
- 抽象同事类(Colleague):定义了同事类的公共接口,包含一个指向中介者的引用,以及与其他同事对象交互的方法。
- 具体同事类(Concrete Colleague):实现了抽象同事类接口,通过中介者与其他同事对象进行通信。
代码示例
以下是一个简单的中介模式示例,模拟一个聊天室系统,用户(同事对象)之间通过聊天室(中介者)进行交流:
// 抽象中介者
interface Mediator {
void sendMessage(String message, Colleague colleague);
}
// 具体中介者:聊天室
class ChatRoom implements Mediator {
@Override
public void sendMessage(String message, Colleague colleague) {
System.out.println(colleague.getName() + " 发送消息: " + message);
}
}
// 抽象同事类
abstract class Colleague {
protected Mediator mediator;
protected String name;
public Colleague(Mediator mediator, String name) {
this.mediator = mediator;
this.name = name;
}
public String getName() {
return name;
}
public abstract void send(String message);
public abstract void receive(String message);
}
// 具体同事类:用户
class User extends Colleague {
public User(Mediator mediator, String name) {
super(mediator, name);
}
@Override
public void send(String message) {
mediator.sendMessage(message, this);
}
@Override
public void receive(String message) {
System.out.println(name + " 收到消息: " + message);
}
}
// 客户端代码
public class MediatorPatternExample {
public static void main(String[] args) {
ChatRoom chatRoom = new ChatRoom();
User user1 = new User(chatRoom, "张三");
User user2 = new User(chatRoom, "李四");
user1.send("你好,李四!");
user2.send("你好,张三!");
}
}
代码解释
- 抽象中介者
Mediator
:定义了sendMessage
方法,用于处理同事对象之间的消息传递。 - 具体中介者
ChatRoom
:实现了Mediator
接口,在sendMessage
方法中打印出消息发送的信息。 - 抽象同事类
Colleague
:包含一个指向中介者的引用和一个名称,定义了send
和receive
方法,用于发送和接收消息。 - 具体同事类
User
:实现了Colleague
接口,在send
方法中调用中介者的sendMessage
方法发送消息,在receive
方法中打印出收到的消息。 - 客户端代码:创建了聊天室和两个用户对象,用户通过聊天室发送消息。
优点
- 降低耦合度:中介模式将对象之间的交互封装在中介者中,使得各个同事对象之间不需要直接相互引用,降低了对象之间的耦合度,提高了系统的可维护性和可扩展性。
- 集中控制交互:中介者负责协调各个同事对象之间的交互,使得交互逻辑集中在中介者中,便于管理和维护。
- 符合开闭原则:可以方便地添加新的同事对象和中介者,而不需要修改现有的同事对象和中介者的代码。
缺点
- 中介者类复杂:随着同事对象的增多,中介者类的逻辑可能会变得复杂,导致中介者类难以维护。
- 系统依赖中介者:所有的交互都依赖于中介者,中介者出现问题可能会影响整个系统的正常运行。
应用场景
- GUI 系统:在图形用户界面中,各个组件(如按钮、文本框等)之间的交互可以通过中介者来协调,降低组件之间的耦合度。
- 分布式系统:在分布式系统中,各个节点之间的通信和协调可以通过中介者来实现,简化节点之间的交互逻辑。
- 多人游戏:在多人游戏中,玩家之间的交互(如聊天、组队等)可以通过中介者来管理,提高游戏的可维护性和扩展性。
Java设计模式 文章被收录于专栏
设计模式是软件开发中针对反复出现的问题所总结归纳出的通用解决方案,它可以帮助开发者更高效地构建软件系统,提升代码的可维护性、可扩展性和可复用性。