中介者模式
中介者模式(Mediator Pattern)是一种行为型设计模式,它通过封装一系列对象之间的交互关系,来减少对象之间的耦合度。中介者模式将对象之间的交互行为集中在中介者对象中,从而降低了系统的复杂度,并提高了系统的可维护性和可扩展性。
在中介者模式中,中介者对象负责协调各个对象之间的交互行为,将各个对象之间的交互关系解耦出来。中介者模式包含三个核心角色:
- 抽象中介者(Mediator):定义中介者的接口,负责协调各个对象之间的交互关系。
- 具体中介者(ConcreteMediator):实现中介者接口,负责协调各个对象之间的交互行为。
- 同事对象(Colleague):定义同事对象的接口,负责与中介者进行交互。
- 具体同事对象(ConcreteColleague):实现同事对象的接口,与其他同事对象进行交互。
中介者模式的优点是:
- 降低了系统的复杂度,将各个对象之间的交互关系集中在中介者对象中,减少了对象之间的耦合度。
- 提高了系统的可维护性和可扩展性,由于对象之间的交互关系集中在中介者对象中,修改和扩展中介者对象比较容易。
- 支持松耦合的设计,各个对象之间的交互行为可以通过中介者对象进行协调,从而实现松耦合的设计。
中介者模式的缺点是:
- 中介者对象的设计较为复杂,需要考虑各个对象之间的交互关系,增加了系统的设计难度。
- 在某些情况下,中介者对象可能会成为系统的瓶颈,降低系统的性能。
下面是一个使用中介者模式的简单示例代码,假设有两个同事类(UserA和UserB),它们之间的交互通过中介者类(ChatRoom)进行协调:
UserA.java:
public class UserA implements Colleague {
private Mediator mediator;
public UserA(Mediator mediator) {
this.mediator = mediator;
}
public void sendMessage(String message) {
mediator.sendMessage(message, this);
}
public void receiveMessage(String message) {
System.out.println("UserA received message: " + message);
}
}
UserB.java:
public class UserB implements Colleague {
private Mediator mediator;
public UserB(Mediator mediator) {
this.mediator = mediator;
}
public void sendMessage(String message) {
mediator.sendMessage(message, this);
}
public void receiveMessage(String message) {
System.out.println("UserB received message: " + message);
}
}
Mediator.java:
public interface Mediator {
void sendMessage(String message, Colleague colleague);
}
ConcreteMediator.java:
import java.util.ArrayList;
import java.util.List;
public class ChatRoom implements Mediator {
private List<Colleague> colleagues;
public ChatRoom() {
this.colleagues = new ArrayList<>();
}
public void addColleague(Colleague colleague) {
this.colleagues.add(colleague);
}
public void sendMessage(String message, Colleague colleague) {
for (Colleague c : colleagues) {
if (c != colleague) {
c.receiveMessage(message);
}
}
}
}
使用中介者模式协调 UserA 和 UserB 的交互:
public class Main {
public static void main(String[] args) {
ChatRoom chatRoom = new ChatRoom();
UserA userA = new UserA(chatRoom);
UserB userB = new UserB(chatRoom);
chatRoom.addColleague(userA);
chatRoom.addColleague(userB);
userA.sendMessage("Hello, UserB!");
userB.sendMessage("Hi, UserA!");
}
}
输出结果:
UserB received message: Hello, UserB!
UserA received message: Hi, UserA!