中介者模式(Mediator Pattern)_中介者模式顺序图
1. 理论:
中介者模式是一种行为型设计模式,它通过引入中介者对象来简化多个类之间的通信。中介者模式的主要目标是促进松散耦合,以便代码易于维护和修改。中介者对象本质上是封装了一个类集合中的行为模式。
主要组成部分:
中介者 (Mediator):定义了同事对象到中介者对象的接口。
具体中介者 (ConcreteMediator):实现中介者的接口并协调各同事对象的交互。
同事类 (Colleague):定义了中介者对象的接口,如果对象之间的交互复杂,则同事类可以是一个抽象类,具有一些实现方法。
2. 实践:
假设我们有一个聊天室应用,其中有多个用户。每个用户可以向聊天室发送消息,聊天室再将这些消息广播给其他用户。在这种情况下,聊天室就是中介者,用户是同事类。
代码示例:
定义中介者和同事接口:
interface ChatMediator {
void sendMessage(String msg, User user);
void addUser(User user);
}
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);
}
实现具体的中介者和同事类:
class ChatRoom implements ChatMediator {
private List<User> users;
public ChatRoom() {
this.users = new ArrayList<>();
}
@Override
public void addUser(User user) {
this.users.add(user);
}
@Override
public void sendMessage(String msg, User user) {
for (User u : users) {
// message should not be received by the user sending it
if (u != user) {
u.receive(msg);
}
}
}
}
class ChatUser extends User {
public ChatUser(ChatMediator mediator, String name) {
super(mediator, name);
mediator.addUser(this);
}
@Override
public void send(String message) {
System.out.println(this.name + " is sending: " + message);
mediator.sendMessage(message, this);
}
@Override
public void receive(String message) {
System.out.println(this.name + " received: " + message);
}
}
测试中介者模式:
public class MediatorPatternDemo {
public static void main(String[] args) {
ChatMediator chatMediator = new ChatRoom();
User user1 = new ChatUser(chatMediator, "Alice");
User user2 = new ChatUser(chatMediator, "Bob");
User user3 = new ChatUser(chatMediator, "Charlie");
user1.send("Hello, everyone!");
user2.send("Hi Alice!");
user3.send("Hey Alice and Bob!");
}
}
解释:
- 在这个示例中,ChatRoom是一个具体的中介者,它维护了一个用户列表并提供了向用户发送消息的方法。ChatUser是一个具体的同事类,它有发送和接收消息的方法。
- 当ChatUser发送消息时,它会调用ChatRoom的sendMessage方法,然后ChatRoom会将消息广播给其他用户。
这种模式的主要优点是它简化了对象之间的通信,将对象之间的依赖关系集中在一个中介者对象上,从而降低了系统的耦合度。