中介者模式(Mediator Pattern)
中介者模式用于降低多个对象之间的耦合,通过将多个对象之间的通信封装在一个中介者对象中来实现。中介者对象可以独立地管理对象之间的交互,并且可以让这些对象互相通信而不必显示地引用彼此。
使用场景
-
多个对象之间存在复杂的相互关系,但是它们的交互逻辑比较分散和混乱。
-
当一个对象需要和其他多个对象进行交互时,如果每个对象都直接和其他对象进行交互,那么会产生复杂的调用关系,导致代码难以维护和扩展。
-
当一个对象的改变会影响到其他多个对象的状态时,如果每个对象都需要手动处理状态变化,那么也会产生复杂的交互逻辑和调用关系。
代码实现
假设正在开发一个聊天室应用程序,我们可以使用中介者模式来协调多个聊天用户之间的交互。在这个应用程序中,每个聊天用户都可以发送消息给其他用户,而中介者将负责将这些消息传递给其他用户。
具体实现中,我们可以定义一个中介者接口,其中包含一个发送消息的方法。然后我们可以创建一个具体的中介者实现,该实现将负责将消息从一个聊天用户传递到另一个聊天用户。我们还需要创建一个聊天用户接口和具体的聊天用户实现,以便我们可以让多个聊天用户加入到中介者中,并相互交互。
以下是一个简单的 Java 中介者模式示例,其中包含一个中介者接口(ChatMediator),聊天用户接口(ChatUser)和具体实现(UserImpl),以及一个具体的中介者实现(ChatMediatorImpl):
// 中介者接口
public interface ChatMediator {
void sendMessage(String message, ChatUser user);
}
// 聊天用户接口
public interface ChatUser {
void receiveMessage(String message);
void sendMessage(String message);
}
// 具体的聊天用户实现
public class UserImpl implements ChatUser {
private ChatMediator mediator;
private String name;
public UserImpl(ChatMediator mediator, String name) {
this.mediator = mediator;
this.name = name;
}
@Override
public void receiveMessage(String message) {
System.out.println(name + " received message: " + message);
}
@Override
public void sendMessage(String message) {
mediator.sendMessage(message, this);
}
}
// 具体的中介者实现
public class ChatMediatorImpl implements ChatMediator {
private List<ChatUser> users;
public ChatMediatorImpl() {
this.users = new ArrayList<>();
}
@Override
public void sendMessage(String message, ChatUser user) {
for (ChatUser u : users) {
if (u != user) {
u.receiveMessage(message);
}
}
}
public void addUser(ChatUser user) {
users.add(user);
}
}
// 测试代码
public class MediatorPatternDemo {
public static void main(String[] args) {
ChatMediator mediator = new ChatMediatorImpl();
ChatUser user1 = new UserImpl(mediator, "Alice");
ChatUser user2 = new UserImpl(mediator, "Bob");
ChatUser user3 = new UserImpl(mediator, "Charlie");
mediator.addUser(user1);
mediator.addUser(user2);
mediator.addUser(user3);
user1.sendMessage("Hi, everyone!");
user2.sendMessage("Hello, Alice.");
user3.sendMessage("What's up, guys?");
}
}
控制台输出:
Bob received message: Hi, everyone!
Charlie received message: Hi, everyone!
Alice received message: Hello, Alice.
Charlie received message: Hello, Alice.
Alice received message: What's up, guys?
Bob received message: What's up, guys?
使用小结
- 在MVC框架中,中介者模式被广泛使用,模型和视图之间的通信和控制都可以通过中介者来实现,降低模块之间的耦合度,提高整个系统的可维护性和可扩展性。
- 中介者模式将复杂的交互转化为中介者对象和其他对象之间的简单交互,从而使系统易于维护和扩展。
评论( 0 )