一、中介者模式概念
1.1 什么是中介者模式
中介者模式是一种行为型设计模式,它通过将对象之间的交互行为集中到一个中介者对象中来解耦对象之间的关联。这种模式被用来减少对象之间的直接通信,从而降低了系统的耦合度,使得系统易于维护和扩展。
结构
中介者模式通常包含以下几个要素:
-
Mediator(中介者): 定义了一个接口用于各个同事对象之间的通信。通常包含一个或多个方法用于定义不同的交互行为。
-
ConcreteMediator(具体中介者): 实现了中介者接口,负责协调各个同事对象之间的交互行为。具体中介者通常包含对各个同事对象的引用,并且通过这些引用来进行通信。
-
Colleague(同事): 定义了一个接口用于与其他同事对象通信的方法。同事对象通过中介者来通信,而不是直接相互引用。
-
ConcreteColleague(具体同事): 实现了同事接口,每个具体同事对象都知道它的中介者对象,并且与其他同事对象通信时,通过中介者来进行。
二、中介者模式代码
2.1 中介者
public interface ChatRoomMediator {
void sendMessage(String message, User user);
}
2.2 同事
public abstract class User {
private String name;
private ChatRoomMediator mediator;
public User(String name, ChatRoomMediator mediator) {
this.name = name;
this.mediator = mediator;
}
String getName() {
return name;
}
void sendMessage(String message) {
mediator.sendMessage(message, this);
}
abstract void receiveMessage(String message);
}
2.3 具体同事
public class BasicUser extends User {
public BasicUser(String name, ChatRoomMediator mediator) {
super(name, mediator);
}
@Override
void receiveMessage(String message) {
System.out.println(getName() + " 收到消息: " + message);
}
}
2.4 测试类
public class MediatorPatternTest {
public static void main(String[] args) {
ChatRoomMediator mediator = new ChatRoom();
BasicUser user1 = new BasicUser("User1", mediator);
BasicUser user2 = new BasicUser("User2", mediator);
user1.sendMessage("Hello,User2!");
user2.sendMessage("Hi,User1!");
// 输出:
// User1 发送消息: Hello,User2!
// User2 发送消息: Hi,User1!
}
}
三、总结
中介者模式的优点包括:
- 减少了对象之间的直接耦合,使得系统易于维护和扩展。
- 可以集中控制对象之间的交互行为,使得交互逻辑更加清晰。
缺点包括:
- 中介者对象可能会变得比较复杂,特别是当系统中有大量同事对象时。
- 中介者模式可能会导致中介者对象过于集中化,使得系统的结构变得复杂。