中介者模式
字数: 0 字 时长: 0 分钟
简介
中介者模式(Mediator Pattern)的核心思想是:通过引入一个中介对象,来封装对象之间复杂的交互关系。
UML 类图
- 抽象中介者(Mediator):定义对象交互的接口,声明发送消息的方法
- 具体中介者(ConcreteMediator):抽象中介者的实现,协调各个具体同事对象之间的通信
- 抽象同事类(Colleague):每个同事对象都持有中介者对象的引用,通过它与其他同事通信
- 具体同事类(ConcreteColleague):实现具体的同事逻辑
实现示例
以中介者模式实现“多人聊天室”为例:
java
// 1. 抽象中介者
interface ChatRoomMediator {
void sendMessage(String msg, User user);
void addUser(User user);
}
// 2. 抽象同事类
abstract class User {
protected String name;
protected ChatRoomMediator mediator;
public User(String name, ChatRoomMediator mediator) {
this.name = name;
this.mediator = mediator;
}
public abstract void receive(String msg);
public abstract void send(String msg);
}
// 3. 具体同事类
ChatUser extends User {
public ChatUser(String name, ChatRoomMediator mediator) {
super(name, mediator);
}
@Override
public void receive (String msg){
System.out.println(name + " 收到消息: " + msg);
}
@Override
public void send (String msg){
System.out.println(name + " 发送消息: " + msg);
}
}
// 4. 具体中介者
class ChatRoom implements ChatRoomMediator {
private List<User> users = new ArrayList<>();
@Override
public void sendMessage(String msg, User sender) {
for (User user : users) {
if (user != sender) {
user.receive(sender.name + ": " + msg);
}
}
}
@Override
public void addUser(User user) {
users.add(user);
}
}
// 调用示例
public static void main(String[] args) {
ChatRoom chatRoom = new ChatRoom();
User user1 = new ChatUser("user1", chatRoom);
User user2 = new ChatUser("user2", chatRoom);
User user3 = new ChatUser("user3", chatRoom);
chatRoom.addUser(user1);
chatRoom.addUser(user2);
chatRoom.addUser(user3);
user1.send("hello");
}