C++中介者模式(Mediator)

要理解介者模式(Mediator Pattern),我们可以通过生活中的实际例子来进行讲解,这样更容易理解。

生活中的实际应用:机场的塔台

假设你在一个机场,飞机需要在起飞和降落时进行通信。如果没有中介者,那么每架飞机都需要与其他所有飞机进行直接通信,这会非常复杂且容易出错。

没有中介者的情况:
  1. 飞机A需要与飞机B、飞机C、飞机D等通讯。
  2. 飞机B同样需要与飞机A、飞机C、飞机D等通讯。

这样,每架飞机都需要维护与其他所有飞机的联系,管理变得非常复杂。

使用中介者模式的情况:塔台

为了简化这个问题,我们引入了一个中介者:塔台。所有的飞机都只需要与塔台通信,由塔台负责协调和管理所有飞机的通信。

使用中介者后的情况:
  1. 飞机A只需要向塔台报告自己的状态或请求。
  2. 塔台会根据飞机A的请求与其他飞机进行协调(例如通知飞机B调整路径)。

这样,任何飞机都不需要知道其他飞机的存在,只需要与塔台通信。这大大简化了各飞机之间的联系,降低了耦合度。

在C++中的实现

下面是一个简单的C++代码示例,用于展示介者模式如何在软件开发中实现:

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

// 中介者类
class ControlTower {
public:
    void registerAirplane(class Airplane* airplane) {
        airplanes.push_back(airplane);
    }

    void sendMessage(const std::string& message, Airplane* sender);

private:
    std::vector<class Airplane*> airplanes;
};

// 飞机类
class Airplane {
public:
    Airplane(const std::string& name, ControlTower* controlTower) 
        : name(name), controlTower(controlTower) {
        controlTower->registerAirplane(this);
    }

    void send(const std::string& message) {
        controlTower->sendMessage(message, this);
    }

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

private:
    std::string name;
    ControlTower* controlTower;
};

// 中介者方法的实现
void ControlTower::sendMessage(const std::string& message, Airplane* sender) {
    for (auto airplane : airplanes) {
        // 不发送消息给自己
        if (airplane != sender) {
            airplane->receive(message);
        }
    }
}

int main() {
    ControlTower* controlTower = new ControlTower();

    Airplane* plane1 = new Airplane("Plane1", controlTower);
    Airplane* plane2 = new Airplane("Plane2", controlTower);
    Airplane* plane3 = new Airplane("Plane3", controlTower);

    plane1->send("request to take off");
    plane2->send("request to land");

    delete plane1;
    delete plane2;
    delete plane3;
    delete controlTower;

    return 0;
}

解释

  1. ControlTower(控制塔):这是中介者类,它维护一个飞机列表,并负责转发消息。
  2. Airplane(飞机):各飞机类与控制塔通信,而不是与其他飞机直接通信。
  3. sendMessage 方法:当某个飞机发送消息时,控制塔负责传递消息给其他所有飞机。

通过这个示例,我们可以看到,使用中介者可以非常大简化对象间的通信和互动,使得系统更加容易维护和扩展。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值