首页 > 后端开发 > C++ > 正文

C++如何实现中介者模式 C++中介者模式的应用

裘德小鎮的故事
发布: 2025-06-27 15:19:01
原创
522人浏览过

中介者模式通过引入中介者对象封装对象间交互,降低系统耦合度。1. 中介者接口定义通信方法;2. 同事类通过中介者通信而非直接引用;3. 具体中介者管理同事间的交互逻辑;4. 实际应用场景包括图形界面、聊天室和游戏开发等;5. 需避免中介者成为承担过多职责的“上帝对象”。优点是解耦性强,提升灵活性与维护性;缺点是中介者可能变得复杂。使用时应结合场景权衡利弊,并可结合其他模式如命令模式优化设计。

C++如何实现中介者模式 C++中介者模式的应用

C++中介者模式,简单来说,就是用一个中介者对象来封装一系列对象之间的交互。对象不再直接相互引用,而是通过中介者来通信,降低了系统的耦合度。这就像机场的空中交通管制员,协调飞机之间的起降,避免碰撞。

C++如何实现中介者模式 C++中介者模式的应用

中介者模式的核心在于将原本分散在多个对象之间的复杂关系,集中到一个中介者对象中进行管理。这样,每个对象只需要关注自己的职责,而不需要了解其他对象的具体实现细节。

C++如何实现中介者模式 C++中介者模式的应用

为什么要用中介者模式?

想象一下,如果没有中介者,各个对象之间直接通信,那将是一个非常混乱的局面。对象之间的依赖关系会变得非常复杂,任何一个对象的修改都可能影响到其他对象,维护起来非常困难。中介者模式可以有效地解决这个问题,它将对象之间的关系解耦,使得系统更加灵活和易于维护。

立即学习C++免费学习笔记(深入)”;

C++如何实现中介者模式 C++中介者模式的应用

C++中介者模式的实现

首先,我们需要定义一个中介者接口:

#include <iostream>
#include <string>
#include <vector>

class Colleague;

class Mediator {
public:
    virtual void sendMessage(const std::string& message, Colleague* colleague) = 0;
    virtual void addColleague(Colleague* colleague) = 0;
    virtual ~Mediator() {}
};
登录后复制

然后,定义同事类(Colleague):

class Colleague {
protected:
    Mediator* mediator;

public:
    Colleague(Mediator* mediator) : mediator(mediator) {}
    virtual void receiveMessage(const std::string& message) = 0;
    virtual void sendMessage(const std::string& message) = 0;
    virtual ~Colleague() {}
};
登录后复制

接下来,实现具体的中介者类:

class ConcreteMediator : public Mediator {
private:
    std::vector<Colleague*> colleagues;

public:
    void sendMessage(const std::string& message, Colleague* colleague) override {
        for (Colleague* c : colleagues) {
            if (c != colleague) {
                c->receiveMessage(message);
            }
        }
    }

    void addColleague(Colleague* colleague) override {
        colleagues.push_back(colleague);
    }
};
登录后复制

最后,实现具体的同事类:

class ConcreteColleague : public Colleague {
private:
    std::string name;

public:
    ConcreteColleague(Mediator* mediator, const std::string& name) : Colleague(mediator), name(name) {
        mediator->addColleague(this);
    }

    void receiveMessage(const std::string& message) override {
        std::cout << name << " received: " << message << std::endl;
    }

    void sendMessage(const std::string& message) override {
        std::cout << name << " sends: " << message << std::endl;
        mediator->sendMessage(message, this);
    }
};
登录后复制

一个简单的使用示例:

int main() {
    ConcreteMediator* mediator = new ConcreteMediator();

    ConcreteColleague* colleague1 = new ConcreteColleague(mediator, "Colleague1");
    ConcreteColleague* colleague2 = new ConcreteColleague(mediator, "Colleague2");
    ConcreteColleague* colleague3 = new ConcreteColleague(mediator, "Colleague3");

    colleague1->sendMessage("Hello from Colleague1!");
    colleague2->sendMessage("Hi from Colleague2!");

    delete colleague1;
    delete colleague2;
    delete colleague3;
    delete mediator;

    return 0;
}
登录后复制

中介者模式的优缺点分析

优点很明显,解耦了对象之间的关系,提高了系统的灵活性和可维护性。但是,缺点也很突出,中介者对象可能会变得非常复杂,承担过多的职责,形成一个“上帝对象”,反而增加了系统的复杂性。因此,在使用中介者模式时,需要仔细权衡。

中介者模式在实际项目中的应用场景

中介者模式在实际项目中有很多应用场景。比如,在图形界面开发中,可以使用中介者模式来协调各个控件之间的交互。再比如,在多人聊天室中,可以使用中介者模式来管理用户之间的消息传递。甚至,在游戏开发中,也可以使用中介者模式来协调各个游戏对象之间的行为。

如何避免中介者对象成为“上帝对象”?

关键在于职责划分。中介者对象应该只负责协调对象之间的交互,而不应该承担过多的业务逻辑。可以将一些复杂的业务逻辑分散到各个同事对象中,或者使用其他的设计模式来辅助中介者模式。例如,可以使用命令模式来封装请求,并将请求的执行委托给相应的处理者。

中介者模式与观察者模式的区别

虽然中介者模式和观察者模式都可以用于解耦对象之间的关系,但它们的侧重点不同。中介者模式侧重于集中管理对象之间的交互,而观察者模式侧重于建立对象之间的依赖关系。观察者模式是一种一对多的关系,一个主题对象可以有多个观察者对象。而中介者模式是一种多对多的关系,多个对象通过一个中介者对象进行通信。选择哪种模式取决于具体的应用场景。

总而言之,中介者模式是一种非常有用的设计模式,可以有效地降低系统的耦合度,提高系统的灵活性和可维护性。但是,在使用中介者模式时,需要仔细权衡其优缺点,并结合具体的应用场景进行选择。

以上就是C++如何实现中介者模式 C++中介者模式的应用的详细内容,更多请关注php中文网其它相关文章!

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号