Java设计模式——中介者模式
⚪中介者模式(Mediator)是一种行为型设计模式,中介者模式通过引入一个中介者对象,协调多个对象之间的交互,使得对象之间不需要显式地引用彼此。
⚪意图:它用于减少对象之间的直接通信,从而减少对象之间的耦合性,使系统更易于维护和扩展。
⚪以下是工厂方法模式的关键要点:
▷ 角色和责任:
- 中介者(Mediator): 中介者是一个接口或抽象类,定义了用于协调对象之间交互的方法。具体的中介者类实现这些方法,管理对象之间的通信。
- 具体中介者(Concrete Mediator): 具体中介者类实现中介者接口,负责实际协调对象之间的通信。它通常维护一个对象的列表,跟踪这些对象的状态并决定如何进行通信。
- 同事(Colleague): 同事是指参与中介者模式的对象,它们之间的通信通过中介者进行。同事对象通常包含一个对中介者的引用。
- 具体同事类(Concrete Colleague): 具体同事类是同事的实现,它们实现了同事接口,负责实际的工作。
▷ 工作流程:
- 各个同事对象将需要协调的信息发送给中介者对象。
- 中介者接收到信息后,根据具体的逻辑进行协调,并将相应的信息传递给其他同事对象。
- 同事对象接收到来自中介者的信息,并根据这些信息采取适当的行动。
▷ 示例
// 中介者接口
interface ChatMediator {
void sendMessage(String message, User user);
}
// 具体中介者类
class ChatMediatorImpl implements ChatMediator {
@Override
public void sendMessage(String message, User user) {
// 中介者负责处理消息的分发
// 在实际应用中,这里可能包括消息的广播或特定用户的消息传递
System.out.println(user.getName() + "发送了消息:" + message);
}
}
// 同事接口
interface User {
void sendMessage(String message);
void receiveMessage(String message);
String getName();
}
// 具体同事类
class ChatUser implements User {
private String name;
private ChatMediator mediator;
public ChatUser(String name, ChatMediator mediator) {
this.name = name;
this.mediator = mediator;
}
@Override
public void sendMessage(String message) {
System.out.println(name + "发送了消息:" + message);
mediator.sendMessage(message, this);
}
@Override
public void receiveMessage(String message) {
System.out.println(name + "收到了消息:" + message);
}
@Override
public String getName() {
return name;
}
}
public class MediatorPatternExample {
public static void main(String[] args) {
ChatMediator mediator = new ChatMediatorImpl();
User user1 = new ChatUser("User1", mediator);
User user2 = new ChatUser("User2", mediator);
User user3 = new ChatUser("User3", mediator);
mediator.sendMessage("大家好!", user1);
user1.sendMessage("有人在吗?");
user2.sendMessage("是的,在这里!");
user3.sendMessage("欢迎加入聊天!");
}
}
⚪适用性
- 一组对象以定义良好但是复杂的方式进行通信,产生的相互依赖关系结构混乱且难以理解。
- 一个对象引用其他很多对象并且直接与这些对象通信,导致难以复用该对象想定制一个分布在多个类中的行为,而又不想生成太多的子类。
⚪应用场景
- 多个对象之间存在复杂的相互通信关系: 当多个对象之间需要相互通信并且通信逻辑复杂时,中介者模式可以帮助简化通信和降低对象之间的耦合度。
- 对象之间的关系是多对多的: 如果对象之间的关系是复杂的多对多关系,直接的通信可能会变得混乱,中介者模式可以帮助整理这些关系。
- 对象行为的分发需要集中管理: 当需要集中管理对象的行为分发时,中介者模式可以将这些管理逻辑放置在中介者中,从而降低了对象之间的直接依赖关系。
⚪实际已有场景
- 聊天应用程序: 如前面示例所示,聊天应用程序中的消息传递可以使用中介者模式来管理,以确保用户之间的通信能够顺利进行。
- 游戏开发: 在多人在线游戏中,玩家之间的互动和通信可以通过中介者来协调。
- Spring MVC: Spring MVC(Model-View-Controller)是一种常见的 Web 应用程序开发框架,其中的控制器(Controller)可以看作是中介者。控制器接收请求并协调模型(Model)和视图(View)之间的交互。
- Spring Integration: Spring Integration 是 Spring 生态系统中的一个项目,它提供了一种在企业应用程序中实现消息传递模式的方式。它使用消息中介者来处理不同组件之间的消息传递。
- Spring Cloud: 在微服务架构中,不同的微服务需要相互通信,Spring Cloud 使用中介者模式来协调服务之间的通信,例如通过服务注册和发现来管理服务之间的依赖关系。

浙公网安备 33010602011771号