1. 中介者模式的核心思想与应用场景
中介者模式(Mediator Pattern)是一种行为设计模式,它通过引入一个中介对象来封装一组对象之间的交互。想象一下机场的塔台控制系统——如果没有塔台调度,所有飞机都需要直接相互通信来确定起降顺序,这将导致混乱不堪。中介者模式正是为了解决这种对象间直接通信的复杂性而诞生的。
在C++中实现中介者模式时,通常会定义一个Mediator接口来声明与组件通信的方法,以及具体的Mediator类来实现这些方法。各个组件(Colleague)则持有对中介者的引用,并通过中介者来间接通信,而不是直接相互引用。这种设计特别适用于以下场景:
- 当对象之间的交互错综复杂,导致依赖关系混乱时
- 当难以复用某个组件,因为它需要与许多其他组件通信时
- 当需要在不同情境下定义组件间的交互规则时
提示:中介者模式与观察者模式经常被混淆。关键区别在于,观察者模式中的观察者是被动接收通知,而中介者模式中的组件是主动通过中介者协调行为。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. C++中介者模式的经典实现
2.1 基础类结构设计
一个标准的中介者模式实现包含以下核心组件:
cpp复制// 前置声明
class Colleague;
// 抽象中介者
class Mediator {
public:
virtual void notify(Colleague* sender, const std::string& event) const = 0;
};
// 抽象同事类
class Colleague {
protected:
Mediator* mediator_;
public:
Colleague(Mediator* mediator = nullptr) : mediator_(mediator) {}
void set_mediator(Mediator* mediator) { mediator_ = mediator; }
};
// 具体中介者
class ConcreteMediator : public Mediator {
private:
Colleague* component1_;
Colleague* component2_;
public:
ConcreteMediator(Colleague* c1, Colleague* c2)
: component1_(c1), component2_(c2) {
component1_->set_mediator(this);
component2_->set_mediator(this);
}
void notify(Colleague* sender, const std::string& event) const override {
if (event == "A") {
// 处理来自组件1的事件A
component2_->react_on_A();
} else if (event == "D") {
// 处理来自组件2的事件D
component1_->react_on_D();
}
}
};
// 具体同事类1
class ConcreteColleague1 : public Colleague {
public:
void do_A() {
// ...
mediator_->notify(this, "A");
}
void react_on_D()
