目录
什么是中介模式
Java 中的中介模式(Mediator Pattern)是一种行为型设计模式,旨在降低多个对象和类之间的通信复杂性。通过这种模式,对象之间不直接通信,而是通过一个中介对象来协调他们之间的交互。这有助于减少系统中组件的相互依赖性,从而提高组件的可重用性和可维护性。
中介模式的组成
- 中介者接口(Mediator):定义了用于通信的方法,可以是接口或抽象类。
- 具体中介者(Concrete Mediator):实现中介者接口,并协调多个不同组件之间的交互。具体中介者知道所有的具体同事类,并从具体同事接收消息,向它们发送命令。
- 同事类(Colleague):与其他对象交互时,不是直接通信,而是通过中介者来交互。
使用场景:
- 当多个类相互交互形成网状结构时,使用中介模式可以将网状结构转化为以中介者为核心的星型结构。
- 减少类之间的依赖,降低耦合度。
- 当一个对象群的行为是互相协作的紧密型群体时,可以通过中介者封装这些交互。
优点:
- 减少了类间的直接通讯,降低了系统的复杂性。
- 有助于单一职责原则,可以将交互的管理和协调职责委托给中介者对象。
- 更容易理解和维护系统中的交互。
缺点:
- 中介者可能会变得过于复杂,自身成为一个难以维护的大类。
- 有可能过度使用,使得一些本可以直接通信的类也通过中介者来通信,可能引入不必要的复杂性。
Java 示例代码:
这里是一个简单的中介者模式实现的例子,展示如何在聊天室中使用中介者模式来交流:
// 中介者接口
interface ChatMediator {
void sendMessage(String msg, User user);
void addUser(User user);
}
// 具体中介者
class ChatRoom implements ChatMediator {
private List<User> users;
public ChatRoom(){
this.users = new ArrayList<>();
}
@Override
public void sendMessage(String msg, User user) {
for(User u : users){
// 不发送消息给自己
if(u != user){
u.receive(msg);
}
}
}
@Override
public void addUser(User user) {
this.users.add(user);
}
}
// 同事类
abstract class User {
protected ChatMediator mediator;
protected String name;
public User(ChatMediator med, String name){
this.mediator = med;
this.name = name;
}
public abstract void send(String msg);
public abstract void receive(String msg);
}
// 具体同事类
class ConcreteUser extends User {
public ConcreteUser(ChatMediator med, String name) {
super(med, name);
}
@Override
public void send(String msg) {
System.out.println(this.name + ": Sending Message = " + msg);
mediator.sendMessage(msg, this);
}
@Override
public void receive(String msg) {
System.out.println(this.name + ": Received Message = " + msg);
}
}
public class Main {
public static void main(String[] args) {
ChatMediator mediator = new ChatRoom();
User user1 = new ConcreteUser(mediator, "John");
User user2 = new ConcreteUser(mediator, "Doe");
mediator.addUser(user1);
mediator.addUser(user2);
user1.send("Hi there!");
user2.send("Hello!");
}
}
在这个示例中,ChatRoom
充当中介者,User
和其子类 ConcreteUser
充当同事类。通过中介者,同事类之间能够交换消息,而无需直接互相引用。
非常的实用,喜欢的小伙伴可以动动你们发财的小手,给博主一个小小的点赞或者关注,就是对博主最大的鼓励,爱你们哦~~