中介者模式通过引入中介者对象集中管理多个对象间的交互,降低耦合度,提升系统可维护性和扩展性。其核心角色包括中介者接口(Mediator)、具体中介者(ConcreteMediator)和同事类(Colleague),同事对象通过中介者进行通信而非直接引用。例如在C++中,按钮和文本框可通过DialogMediator实现联动,点击按钮后由中介者通知文本框更新内容,避免两者直接依赖。该模式适用于GUI组件、游戏对象等多对象复杂交互场景,能有效减少网状依赖,符合开闭原则。但需注意中介者可能因职责过多而变得臃肿,应合理划分职责,结合智能指针与抽象接口优化设计。

在C++中,当多个对象之间频繁交互,导致系统耦合度高、维护困难时,可以使用中介者模式(Mediator Pattern)来集中管理对象之间的通信。该模式通过引入一个中介者对象,将原本相互引用的对象变得松耦合,所有交互都通过中介者进行转发,从而简化对象之间的依赖关系。
中介者模式定义了一个中介对象来封装一系列对象之间的交互。对象之间不直接通信,而是通过中介者进行消息传递,降低了对象之间的依赖性,使系统更易于维护和扩展。
这种模式特别适用于多个对象之间存在复杂交互的场景,比如GUI组件之间的联动、游戏对象之间的通信等。
中介者模式通常包含以下几个关键部分:
立即学习“C++免费学习笔记(深入)”;
假设我们有两个界面控件:按钮和文本框。当按钮被点击时,文本框需要更新内容。使用中介者模式可以避免按钮直接操作文本框。
#include <iostream>
#include <string>
<p>// 前向声明
class Colleague;</p><p>// 中介者接口
class Mediator {
public:
virtual void notify(Colleague* sender, const std::string& event) = 0;
};</p><p>// 同事基类
class Colleague {
protected:
Mediator* mediator;</p><p>public:
Colleague(Mediator* m) : mediator(m) {}
virtual void send(const std::string& event) {
mediator->notify(this, event);
}
virtual void receive(const std::string& message) = 0;
};</p><p>// 具体同事类:按钮
class Button : public Colleague {
public:
Button(Mediator* m) : Colleague(m) {}</p><pre class='brush:php;toolbar:false;'>void click() {
std::cout << "按钮被点击\n";
send("button_clicked");
}};
// 具体同事类:文本框 class TextBox : public Colleague { private: std::string text;
public: TextBox(Mediator* m) : Colleague(m), text("初始文本") {}
void receive(const std::string& message) override {
if (message == "button_clicked") {
text = "文本已更新";
std::cout << "文本框内容更新为: " << text << "\n";
}
}
void display() const {
std::cout << "当前文本: " << text << "\n";
}};
// 具体中介者 class DialogMediator : public Mediator { private: Button button; TextBox textbox;
public: DialogMediator(Button b, TextBox t) : button(b), textbox(t) {}
void notify(Colleague* sender, const std::string& event) override {
if (event == "button_clicked") {
textbox->receive(event);
}
}};
使用示例:
int main() {
Button btn(nullptr);
TextBox txt(nullptr);
<pre class='brush:php;toolbar:false;'>DialogMediator mediator(&btn, &txt);
// 设置中介者
btn = Button(&mediator);
txt = TextBox(&mediator);
btn.click(); // 触发交互
txt.display();
return 0;}
中介者模式的主要优点包括:
适合使用中介者模式的场景有:
基本上就这些。中介者模式不是万能的,过度使用可能导致中介者本身变得臃肿,因此需要合理设计职责划分。对于C++项目,结合智能指针和接口抽象,能更好地发挥这一模式的优势。
以上就是C++中介者模式 对象交互集中管理的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号