📅  最后修改于: 2023-12-03 15:06:15.078000             🧑  作者: Mango
中介者设计模式是一种行为型设计模式,可以降低对象之间的耦合度。它通过引入一个中介者对象来协调其他对象之间的交互,从而避免它们之间的直接依赖关系。以下是该模式的组成部分:
中介者是最核心的部分。它定义了一组接口,用于与 Colleague(同事)对象进行通信,并负责协调它们之间的交互。因为只有中介者与其他对象进行通信,所以它能够维护对象之间的松散耦合。中介者可以是抽象类或接口,它的具体实现可以是单体模式或访问者模式。
具体中介者是 Mediator 的实现。它了解并维护 Colleague 对象之间的依赖关系,并协调它们之间的通信。具体中介者通常会存储其他对象的引用,以便相互通信。ConcreteMediator 也可以实现 Mediator 的接口,以使它能够被其他对象识别。
同事是需要协作的对象。每个同事对象都知道中介者对象,并使用其接口来与其他同事对象通信。每个同事对象通常只知道自己的行为,而不关心其他同事对象的行为。同事对象之间的直接通信被中介者对象拦截并处理。
具体同事是 Colleague 的实现。它了解并维护自己的状态,并实现与其他同事对象的交互。它们需要向中介者对象注册自己,并使用中介者的接口来与其他同事对象通信。
下面是一个简单的代码示例,描述了一个聊天室中的用户如何通过中介者对象进行通信。
public interface ChatRoomMediator {
void showMessage(User user, String message);
}
public class ChatRoom implements ChatRoomMediator {
@Override
public void showMessage(User user, String message) {
System.out.println(new Date().toString()
+ " [" + user.getName() + "] : " + message);
}
}
public abstract class User {
protected String name;
protected ChatRoomMediator chatMediator;
public User(ChatRoomMediator chatMediator, String name) {
this.chatMediator = chatMediator;
this.name = name;
}
public abstract void sendMessage(String message);
public String getName() {
return name;
}
}
public class ChatUser extends User {
public ChatUser(ChatRoomMediator mediator, String name) {
super(mediator, name);
}
@Override
public void sendMessage(String message) {
chatMediator.showMessage(this, message);
}
}
public class ChatRoomDemo {
public static void main(String[] args) {
ChatRoomMediator chatRoom = new ChatRoom();
User user1 = new ChatUser(chatRoom, "User1");
User user2 = new ChatUser(chatRoom, "User2");
User user3 = new ChatUser(chatRoom, "User3");
user1.sendMessage("Hello, I am User1.");
user2.sendMessage("Hi User1, I am User2.");
user3.sendMessage("Hi all, I am User3.");
}
}