1、简述
中介者模式是一种行为型设计模式,用于降低多个对象之间的复杂交互关系。通过引入一个中介者对象,各个对象不再直接相互引用,而是通过中介者进行通信,从而实现松耦合。
本文将介绍中介者模式的基本概念、结构、优缺点,并提供一个实际的应用案例。
设计模式样例:https://gitee.com/lhdxhl/design-pattern-example.git
2、什么是中介者模式?
中介者模式通过定义一个中介者对象,封装对象之间的交互,使各对象之间不直接交互,而是通过中介者来协调。这样可以减少对象之间的耦合,便于系统的维护和扩展。
使用场景:
- 聊天室应用:用户之间的消息传递通过服务器中介。
- GUI组件交互:界面组件之间的通信通过一个中介者类。
- 复杂系统中的模块交互:多个模块需要协调工作。
中介者模式包含以下角色:
- 中介者接口(Mediator):定义具体中介者需要实现的接口。
- 具体中介者(ConcreteMediator):实现中介者接口,协调各对象的交互。
- 同事类(Colleague):定义交互对象的基类,每个同事类只关注自身逻辑,通过中介者与其他同事类通信。
类图:
Colleague <--> Mediator <--> ConcreteMediator <--> OtherColleagues
3、实际案例
假设我们有一个聊天室应用,用户可以发送消息给其他用户,消息的传递通过聊天室中介者完成。
// 中介者接口
public interface ChatMediator {
void sendMessage(String message, User user);
void addUser(User user);
}
// 具体中介者
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.receiveMessage(message);
}
}
}
}
// 同事类
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 sendMessage(String message);
public abstract void receiveMessage(String message);
}
// 具体同事类
public class ChatUser extends User {
public ChatUser(ChatMediator mediator, String name) {
super(mediator, name);
}
@Override
public void sendMessage(String message) {
System.out.println(name + " 发送消息: " + message);
mediator.sendMessage(message, this);
}
@Override
public void receiveMessage(String message) {
System.out.println(name + " 收到消息: " + message);
}
}
// 测试类
public class MediatorPatternDemo {
public static void main(String[] args) {
ChatMediator chatRoom = new ChatRoom();
User user1 = new ChatUser(chatRoom, "Alice");
User user2 = new ChatUser(chatRoom, "Bob");
User user3 = new ChatUser(chatRoom, "Charlie");
chatRoom.addUser(user1);
chatRoom.addUser(user2);
chatRoom.addUser(user3);
user1.sendMessage("Hello, everyone!");
user2.sendMessage("Hi Alice!");
}
}
输出:
Alice 发送消息: Hello, everyone!
Bob 收到消息: Hello, everyone!
Charlie 收到消息: Hello, everyone!
Bob 发送消息: Hi Alice!
Alice 收到消息: Hi Alice!
Charlie 收到消息: Hi Alice!
4、中介者模式的优缺点
优点
- 降低耦合性:对象之间的通信通过中介者完成,避免了直接依赖。
- 集中控制:中介者集中管理对象的交互逻辑。
- 扩展性强:增加新对象时,不需要修改现有对象,只需更新中介者。
缺点
- 中介者复杂性增加:随着对象数量的增加,中介者的逻辑可能变得复杂。
- 可能导致性能问题:中介者成为通信的中心,可能成为性能瓶颈。
5、应用场景
- GUI开发:在GUI应用中,中介者模式用于协调按钮、文本框等组件的交互。
- 模块化系统:在复杂系统中,中介者模式用于模块间通信,避免模块间耦合。
- 消息队列:类似中介者的概念,通过消息队列协调多个系统。
6、总结
中介者模式通过引入中介者对象,简化了对象之间的交互逻辑,降低了耦合性,是一种非常实用的设计模式。在实际开发中,特别是在需要集中管理交互逻辑的场景下,中介者模式能够显著提升代码的可读性和可维护性。
希望本文对您理解和应用中介者模式有所帮助!欢迎留言交流讨论。
评论区