行为型-中介者模式
2026/1/15大约 2 分钟Java设计模式行为型模式中介者模式Java设计模式面向对象架构设计最佳实践代码优化
概述
中介者模式(Mediator Pattern)用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。
适用场景
- 一组对象以定义良好但是复杂的方式进行通信
- 想定制一个分布在多个类中的行为,而又不想生成太多的子类
- 对象之间存在复杂的引用关系,导致依赖关系结构混乱
角色组成
- Mediator(抽象中介者):定义同事对象到中介者对象的接口
- ConcreteMediator(具体中介者):实现协调各同事对象
- Colleague(抽象同事类):定义同事类接口
- ConcreteColleague(具体同事类):每个同事只知道自己的行为
代码实现
1. 抽象中介者
public interface ChatMediator {
void sendMessage(String message, User user);
void addUser(User user);
}2. 抽象同事类
public 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);
public String getName() { return name; }
}3. 具体中介者
public class ChatRoom implements ChatMediator {
private List<User> users = new ArrayList<>();
@Override
public void addUser(User user) {
users.add(user);
}
@Override
public void sendMessage(String message, User sender) {
for (User user : users) {
if (user != sender) {
user.receive(sender.getName() + ": " + message);
}
}
}
}4. 具体同事类
public class ChatUser extends User {
public ChatUser(ChatMediator mediator, String name) {
super(mediator, name);
}
@Override
public void send(String message) {
System.out.println(name + " 发送: " + message);
mediator.sendMessage(message, this);
}
@Override
public void receive(String message) {
System.out.println(name + " 收到: " + message);
}
}5. 客户端
public class Client {
public static void main(String[] args) {
ChatMediator chatRoom = new ChatRoom();
User user1 = new ChatUser(chatRoom, "张三");
User user2 = new ChatUser(chatRoom, "李四");
User user3 = new ChatUser(chatRoom, "王五");
chatRoom.addUser(user1);
chatRoom.addUser(user2);
chatRoom.addUser(user3);
user1.send("大家好!");
}
}# 输出
张三 发送: 大家好!
李四 收到: 张三: 大家好!
王五 收到: 张三: 大家好!类图
JDK 中的应用
java.util.Timerjava.util.concurrent.Executor#execute()java.lang.reflect.Method#invoke()
优缺点
优点:
- 简化了对象之间的交互
- 将各同事解耦
- 减少子类生成
缺点:
- 中介者会庞大,变得复杂难以维护
