1. 中介者模式:为什么我们需要一个"中间人"?
想象一下这样的场景:你正在开发一个复杂的航空管制系统,数十架飞机需要实时交换位置、速度、航线变更等信息。如果让每架飞机都直接与其他所有飞机通信,系统很快就会变成一团乱麻。这正是中介者模式(Mediator Pattern)要解决的问题——用一个中介对象来封装一系列对象之间的交互。
在面向对象设计中,我们常常会遇到多个对象相互引用、彼此调用的网状结构。这种结构虽然直观,但随着系统复杂度上升,会带来几个致命问题:
- 可维护性灾难:对象间的耦合度过高,修改一个类可能引发连锁反应
- 复用困难:由于对象间强关联,很难单独复用某个类
- 理解成本高:开发人员需要跟踪大量交叉引用才能理解系统行为
中介者模式通过引入一个中介者对象,将网状结构转化为星型结构。所有对象只与中介者通信,由中介者负责协调各对象间的交互。这就像把一群争吵的人交给一个会议主持人管理,效率会大幅提升。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 中介者模式的核心结构与角色解析
2.1 UML类图与组件职责
让我们先看中介者模式的标准UML结构:
code复制[Colleague] <--- [Mediator] ---> [Colleague]
| |
[ConcreteColleague] [ConcreteColleague]
关键角色包括:
- Mediator(抽象中介者):定义同事对象到中介者对象的接口
- ConcreteMediator(具体中介者):实现抽象中介者的接口,协调各同事对象
- Colleague(抽象同事类):定义同事对象的接口,持有中介者引用
- ConcreteColleague(具体同事类):实现抽象同事类,与其他同事通过中介者通信
2.2 模式实现的Java代码骨架
以下是中介者模式的基本Java实现框架:
java复制// 抽象中介者
interface Mediator {
void register(Colleague colleague);
void relay(Colleague colleague, String message);
}
// 具体中介者
class ConcreteMediator implements Mediator {
private List<Colleague> colleagues = new ArrayList<>();
@Override
public void register(Colleague colleague) {
colleagues.add(colleague);
colleague.setMediator(this);
}
@Override
public void relay(Colleague sender, String message) {
for (Colleague colleague : colleagues) {
if (colleague != sender) {
colleague.receive(message);
}
}
}
}
