学习目标:
- 中介者模式
学习内容:
中介者模式(Mediator Pattern)是一种行为设计模式,它通过引入一个中介者对象来封装一组对象之间的交互,避免对象之间的直接引用,从而降低它们之间的耦合度,使得对象之间的交互更加灵活和可扩展。
中介者模式的核心思想
- 引入中介者对象:中介者对象负责管理和协调其他对象之间的交互。
- 去除对象之间的直接引用:所有对象通过中介者进行通信,而不是直接调用彼此的方法。
- 集中管理交互逻辑:将复杂的交互逻辑集中到中介者对象中,简化各对象的职责。
中介者模式的组成部分
- 中介者接口(Mediator Interface):定义中介者的基本操作,通常是协调不同同事(Colleague)对象的方法。
- 具体中介者(Concrete Mediator):实现中介者接口,协调各个同事对象的交互。
- 同事类(Colleague Class):各个需要进行交互的对象,持有对中介者的引用,通过中介者与其他对象通信。
中介者模式的实现
以一个简单的聊天室为例,每个用户通过聊天室中介者发送和接收消息:
// 中介者接口
interface ChatMediator {
void sendMessage(String message, User user);
void addUser(User user);
}
// 具体中介者
class ChatMediatorImpl implements ChatMediator {
private List<User> users = new ArrayList<>();
@Override
public void addUser(User user) {
users.add(user);
}
@Override
public void sendMessage(String message, User user) {
for (User u : users) {
if (u != user) {
u.receive(message);
}
}
}
}
// 同事类
abstract class User {
protected ChatMediator mediator;
protected String name;
public User(ChatMediator mediator, String name) {
this.mediator = mediator;
this.name = name;
}
public abstract void send(String message);
public abstract void receive(String message);
}
// 具体同事类
class UserImpl extends User {
public UserImpl(ChatMediator mediator, String name) {
super(mediator, name);
}
@Override
public void send(String message) {
System.out.println(this.name + " 发送消息: " + message);
mediator.sendMessage(message, this);
}
@Override
public void receive(String message) {
System.out.println(this.name + " 接收到消息: " + message);
}
}
// 客户端代码
public class MediatorPatternDemo {
public static void main(String[] args) {
ChatMediator chatMediator = new ChatMediatorImpl();
User user1 = new UserImpl(chatMediator, "Alice");
User user2 = new UserImpl(chatMediator, "Bob");
User user3 = new UserImpl(chatMediator, "Charlie");
chatMediator.addUser(user1);
chatMediator.addUser(user2);
chatMediator.addUser(user3);
user1.send("Hello everyone!");
}
}
在这个例子中:
- ChatMediator 定义了中介者的接口。
- ChatMediatorImpl 是具体的中介者,负责协调用户之间的消息发送。
- User 是抽象的同事类,定义了发送和接收消息的方法。
- UserImpl 是具体的同事类,通过中介者发送和接收消息。
中介者模式的优缺点
优点
- 降低耦合:对象之间的耦合度降低,改动一个对象不会影响其他对象。
- 集中控制:交互逻辑集中在中介者中,便于维护和扩展。
- 简化对象:各个对象只需关注自身的功能,不需要处理复杂的交互逻辑。
缺点
- 中介者复杂度增加:随着系统的扩展,中介者可能变得复杂,难以维护。
- 潜在的性能问题:集中化的中介者可能成为性能瓶颈,尤其是在大量对象频繁交互的场景中。
适用场景
- 复杂对象之间的交互需要集中管理。
- 系统中对象之间的交互逻辑复杂且多变。
- 需要解耦对象之间的依赖关系,提高系统的可扩展性和可维护性。
通过中介者模式,可以更好地管理对象之间的交互,提升系统的灵活性和可维护性。