一、简介
中介者模式(Mediator Pattern)是一种行为设计模式,旨在减少对象之间的直接通信,通过引入一个中介对象(中介者)来集中控制和协调这些对象之间的交互。中介者模式的定义如下:
中介者模式指的是使用一个中介对象来封装一系列对象之间的交互,使得对象之间不再显式地相互引用,而是通过中介者对象来进行通信。这样一来,对象之间的耦合度降低,增加新对象也更加容易,因为它们不需要知道彼此的细节,只需了解中介者的接口即可。中介者模式包含以下主要角色:
- 中介者(Mediator):定义了一个接口,用于各个同事对象之间的通信。
- 具体中介者(Concrete Mediator):实现了中介者接口,负责协调各个同事对象,并处理它们之间的交互关系。
- 同事对象(Colleague):每个同事对象都知道中介者对象,与其他同事对象之间通过中介者对象进行通信。
通过中介者模式,对象之间的通信被封装到中介者对象中,对象之间的直接联系减少,降低了耦合性,提高了代码的可维护性和灵活性。这种模式特别适用于对象之间的交互较复杂、互相依赖性较高的情况。
二、中介者模式
当涉及实际的聊天室示例时,涉及到实时通信、用户界面等复杂性,这在文字交流中无法完全展示。以下是一个简化的 Java 示例,模拟了聊天室的基本功能,用于演示中介者模式的基本思想:
2.1、中介者接口
// 中介者接口
public interface ChatRoomMediator {
void sendMessage(String message, User user);
void addUser(User user);
}
2.2、具体中介者
import java.util.ArrayList;
import java.util.List;
// 具体中介者 - 聊天室
public class ChatRoom implements ChatRoomMediator {
private List<User> users;
public ChatRoom() {
this.users = new ArrayList<>();
}
@Override
public void sendMessage(String message, User user) {
for (User u : users) {
// 排除发送者,向其他用户发送消息
if (u != user) {
u.receive(message);
}
}
}
@Override
public void addUser(User user) {
users.add(user);
}
}
2.3、同事对象
// 同事对象 - 用户
public class User {
private String name;
private ChatRoomMediator mediator;
public User(String name, ChatRoomMediator mediator) {
this.name = name;
this.mediator = mediator;
this.mediator.addUser(this);
}
public void send(String message) {
mediator.sendMessage(message, this);
}
public void receive(String message) {
System.out.println(name + " 接受的消息: " + message);
}
}
2.4、使用
// 测试类
public class MediatorPatternExample {
public static void main(String[] args) {
ChatRoomMediator chatRoom = new ChatRoom();
User user1 = new User("程咬金", chatRoom);
User user2 = new User("妲己", chatRoom);
User user3 = new User("赵子龙", chatRoom);
user1.send("Hello, 我是程咬金!");
user2.send("Hi, 妲己来了!");
user3.send("Ha, 常山赵子龙在此!");
}
}
运行结果:
妲己 接受的消息: Hello, 我是程咬金!
赵子龙 接受的消息: Hello, 我是程咬金!
程咬金 接受的消息: Hi, 妲己来了!
赵子龙 接受的消息: Hi, 妲己来了!
程咬金 接受的消息: Ha, 常山赵子龙在此!
妲己 接受的消息: Ha, 常山赵子龙在此!
这个简化的示例展示了中介者模式在聊天室场景中的应用。ChatRoom 充当中介者,负责用户之间的消息分发;User 是同事对象,通过中介者发送消息。在测试类中,演示了用户发送消息并接收消息的过程。这个例子是一个简单的演示,实际的聊天室系统要复杂得多,包括实时通信、界面等功能。
三、优点与缺点
中介者模式具有以下优点和缺点:
优点
- 减少耦合度: 中介者模式可以减少对象之间的直接引用,使得对象之间的交互由中介者统一处理,降低了对象之间的耦合度。
- 简化对象间交互: 通过中介者模式,对象之间的交互变得更加简单明了,各个对象只需要与中介者进行通信,而不需要了解其他对象的细节信息。
- 易于扩展维护: 新增、删除或修改一个同事对象或中介者对象相对容易,由于对象之间的交互关系由中介者负责,可以更灵活地扩展和维护系统。
- 集中控制逻辑: 中介者模式将交互逻辑集中到中介者对象中,易于控制和管理系统的逻辑。
缺点
- 中介者过于复杂: 如果中介者承担了太多的职责,可能会变得过于复杂,导致中介者本身成为一个大而全的类,难以维护和理解。
- 可能导致性能问题: 中介者模式可能导致性能问题,特别是当中介者对象变得庞大,处理逻辑复杂时,可能会影响系统的性能。
总的来说,中介者模式适用于系统中对象之间的交互较为复杂、对象之间耦合度较高的场景。它能够有效地将对象之间的交互逻辑进行集中管理,但在使用过程中需要注意合理分配中介者的职责,避免中介者过于臃肿。