设计模式-中介者模式
# 设计模式-中介者模式
# 概述
平时我们的QQ能方便让两个人进行交流,但当你需要把一个通知告诉很多人的时候,不可能把一条消息挨个挨个复制发送给一群人,
而是通过QQ群的时候。QQ群在需要和多个人交互的时候,恰好就充当中介者的身份,简化对象之间的交互。
# 定义
对于那些对象之间存在复杂交互关系的系统,中介者模式提供了一种简化复杂交互的解决方案,它通过引入中介者将原本对象之间的两两交互转化为每个对象与中介者之间的交互。
中介者模式:定义一个对象来封装一系列对象的交互。中介者模式使各对象之间不需要显式地相互引用。
# 中介者模式结构
中介者模式包含四个角色:
1、抽象中介者(Mediator)角色:它是中介者的接口,提供了同事对象注册与转发同事对象信息的抽象方法。 2、具体中介者(Concrete Mediator)角色:实现中介者接口,定义一个 List 来管理同事对象,协调各个同事角色之间的交互关系,因此它依赖于同事角色。 3、抽象同事类(Colleague)角色:定义同事类的接口,保存中介者对象,提供同事对象交互的抽象方法,实现所有相互影响的同事类的公共功能。 4、具体同事类(Concrete Colleague)角色:是抽象同事类的实现者,当需要与其他同事对象交互时,由中介者对象负责后续的交互。
# 中介者模式案例
下面实现一个简单的聊天室:
1、创建用户对象
public class User {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public User(String name) {
this.name = name;
}
public void sendMessage(String message) {
ChatRoom.showMessage(this, message);
}
}
2、创建聊天室
public class ChatRoom {
public static void showMessage(User user, String message){
System.out.println(new Date().toString() + " [" + user.getName() +"] : " + message);
}
}
3、案例实现
public class MediatorPatternDemo {
public static void main(String[] args) {
User robert = new User("Robert");
User john = new User("John");
robert.sendMessage("Hi! John!");
john.sendMessage("Hello! Robert!");
}
}
# 中介者模式优缺点
优点:
降低了对象之间的耦合性,使得对象易于独立地被复用。
将对象间的一对多关联转变为一对一的关联,提高系统的灵活性,使得系统易于维护和扩展。
减少子类生成。
缺点:
- 在具体中介类中包含了大量同事之间的交互细节,可能会导致具体中介类非常复杂,使得系统难以维护。
# 中介者模式适用环境
- 系统中对象之间存在复杂的引用关系,系统结构混乱且难以理解。
- 一个对象引用了其他很多对象并且直接和这些对象交互。
- 想通过一个中间类来封装多个类中的行为,而又不想生成太多的子类。
# 参考
Java设计模式
上次更新: 2024/06/29, 15:13:44