中介者模式(Mediator Pattern)概述
定义
中介者模式(Mediator Pattern)是一种行为型设计模式,它通过定义一个中介者对象来封装一系列对象之间的交互,使得这些对象之间不直接交互,从而减少了对象之间的依赖关系,降低了系统的复杂度。
在中介者模式中,各个对象通过中介者进行通信,避免了它们之间的直接耦合。中介者通常是一个中央控制器,负责协调和管理对象之间的交互。
中介者模式的角色
- 抽象中介者(Mediator):定义同事对象之间交互的接口。
- 具体中介者(ConcreteMediator):实现抽象中介者,协调不同的同事对象的交互。
- 同事类(Colleague):每个同事类通过中介者与其他同事类交互,通常会在中介者中注册自己。
示例:聊天应用中的中介者模式
假设有一个聊天应用,每个用户是一个同事类,而聊天系统本身是一个中介者,负责协调不同用户之间的消息传递。
Java 实现代码
// 抽象中介者
abstract class ChatRoom {
public abstract void sendMessage(String message, User user);
}
// 具体中介者
class ConcreteChatRoom extends ChatRoom {
@Override
public void sendMessage(String message, User user) {
System.out.println(user.getName() + " 说: " + message);
}
}
// 同事类 - 用户
class User {
private String name;
private ChatRoom chatRoom;
public User(String name, ChatRoom chatRoom) {
this.name = name;
this.chatRoom = chatRoom;
}
public String getName() {
return name;
}
public void sendMessage(String message) {
chatRoom.sendMessage(message, this);
}
}
// 客户端
public class MediatorPatternDemo {
public static void main(String[] args) {
// 创建中介者(聊天系统)
ChatRoom chatRoom = new ConcreteChatRoom();
// 创建用户并加入中介者
User user1 = new User("Alice", chatRoom);
User user2 = new User("Bob", chatRoom);
// 用户发送消息
user1.sendMessage("你好,Bob!");
user2.sendMessage("你好,Alice!");
}
}
输出结果
Alice 说: 你好,Bob!
Bob 说: 你好,Alice!
中介者模式的优点
- 降低耦合度:对象不再直接相互通信,而是通过中介者进行通信,减少了对象之间的依赖关系。
- 集中管理:中介者负责协调对象之间的交互,所有的交互逻辑集中在一个地方,易于管理和扩展。
- 提高可扩展性:新增同事对象时,无需修改现有的同事类,只需要在中介者中进行相应的修改。
中介者模式的缺点
- 增加中介者的复杂度:所有的交互逻辑都集中在中介者中,可能导致中介者的代码变得复杂。
- 可能成为系统的瓶颈:中介者作为中心控制者,如果过于复杂,可能成为系统的性能瓶颈。
使用场景
- GUI组件协作:在图形用户界面(GUI)中,不同的控件可能需要协作。中介者模式可以用于在不同的控件之间提供协调和管理。
- 聊天应用:如上述示例,用户通过中介者进行消息传递,避免了用户之间直接的耦合。
- 工作流管理:不同任务或节点之间的交互可以通过中介者进行管理。
通过中介者模式,可以将对象间复杂的交互转移到一个中介者中,使得系统结构更加简洁,易于管理和扩展。
标签:String,chatRoom,模式,User,中介,设计模式,交互,public From: https://www.cnblogs.com/pangchunlei/p/18674258