← 返回博客列表

模式特点

用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。

类图

类图

应用场景

示例代码(C++)

class Mediator;

// 同事基类
class Module {
protected: Mediator* m_mediator;
public: Module(Mediator* m) : m_mediator(m) {}
          virtual ~Module() = default; };

// 中介者
class Mediator {
public:
    Module* motionPanel = nullptr;
    Module* safetyPanel = nullptr;
    virtual void notify(Module* sender, const std::string& event) = 0;
    virtual ~Mediator() = default;
};

// 运动面板
class MotionPanel : public Module {
public:
    MotionPanel(Mediator* m) : Module(m) {}
    void startMove() { m_mediator->notify(this, "开始运动"); }
    void onStop() { std::cout << "[运动面板] 停止运动" << std::endl; }
};

// 安全面板
class SafetyPanel : public Module {
public:
    SafetyPanel(Mediator* m) : Module(m) {}
    void onMoveStart() { std::cout << "[安全面板] 监控运动开始" << std::endl; }
    void triggerStop() { m_mediator->notify(this, "紧急停止"); }
};

// 具体中介者
class RobotMediator : public Mediator {
    MotionPanel* motion; SafetyPanel* safety;
public:
    void notify(Module* sender, const std::string& event) override {
        if (event == "开始运动") safety->onMoveStart();
        else if (event == "紧急停止") motion->onStop();
    }
};