设计模式 - 中介者模式(Mediator Pattern)
介绍
中介者模式是一种行为设计模式,用于降低多个对象之间的通信复杂度。通过使用中介者模式,对象之间通过一个中介者来进行通信,而不是直接互相通信,从而减少了对象间的依赖关系。
实现
我们以一个聊天室应用为例来展示中介者模式的应用。假设我们有一个聊天室,里面有多个用户,用户之间发送的消息需要通过服务器来转发。
定义中介者接口
首先定义一个中介者接口,它声明了发送消息的方法。
interface ChatMediator {
void sendMessage(String message, User user);
}
创建具体中介者类
然后创建具体的中介者类,它实现了 ChatMediator
接口,并提供了具体的转发消息的逻辑。
class ChatServer implements ChatMediator {
private Map<String, User> users = new HashMap<>();
public void addUser(User user) {
users.put(user.getName(), user);
user.setMediator(this);
}
@Override
public void sendMessage(String message, User user) {
for (User u : users.values()) {
if (!u.equals(user)) {
u.receive(message);
}
}
}
}
创建用户类
接着创建用户类,它包含发送和接收消息的方法,并持有一个中介者的引用。
class User {
private String name;
private ChatMediator mediator;
public User(String name) {
this.name = name;
}
public void send(String message) {
System.out.println(name + " sends: " + message);
mediator.sendMessage(message, this);
}
public void receive(String message) {
System.out.println(name + " receives: " + message);
}
public void setMediator(ChatMediator mediator) {
this.mediator = mediator;
}
public String getName() {
return name;
}
}
使用中介者模式
接下来,在主程序中使用中介者模式来模拟聊天室的通信。
public class ChatRoomApp {
public static void main(String[] args) {
ChatServer chatServer = new ChatServer();
User alice = new User("Alice");
User bob = new User("Bob");
User charlie = new User("Charlie");
chatServer.addUser(alice);
chatServer.addUser(bob);
chatServer.addUser(charlie);
alice.send("Hello everyone!");
bob.send("Hi Alice!");
charlie.send("Let's start chatting!");
}
}
使用场景
中介者模式适用于以下情况:
- 一组对象以定义良好但复杂的方式进行通信,导致类间的依赖关系难以理解和维护。
- 你想要减少对象之间复杂的依赖关系,从而提高类的可复用性。
- 你想要简化对象之间的交互,特别是当交互逻辑变得越来越复杂时。
总结
中介者模式通过引入一个中介者对象来简化对象之间的交互,降低了对象间的依赖关系。这种方式不仅增强了代码的可维护性和可扩展性,还能使得对象的职责更加清晰。
以上就是中介者模式的一个实现案例,希望这篇文章能帮助你理解中介者模式的使用方式及其优势。
评论区