设计模式17之c++中介者模式(含示例代码)

中介者模式是一种行为型设计模式,它通过将对象之间的通信转发给中介者对象,从而解耦了对象之间的相互作用。中介者模式可以用于实现复杂的交互逻辑、协调多个对象之间的行为等应用。

下面是一个使用 C++ 实现中介者模式的示例代码:

#include <iostream>
#include <string>
#include <vector>
// 抽象中介者类
class Mediator {
public:
    virtual ~Mediator() {}
    virtual void Send(const std::string& message, const class Colleague* colleague) const = 0;
};
// 抽象同事类
class Colleague {
public:
    virtual ~Colleague() {}
    virtual void Receive(const std::string& message) const = 0;
    virtual void Send(const std::string& message) const = 0;
    void SetMediator(const Mediator* mediator) {
        mediator_ = mediator;
    }
protected:
    const Mediator* mediator_;
};
// 具体中介者类:聊天室
class ChatRoom : public Mediator {
public:
    void Send(const std::string& message, const Colleague* colleague) const override {
        std::cout << colleague->GetName() << " sends message: " << message << std::endl;
        for (const auto& c : colleagues_) {
            if (c != colleague) {
                c->Receive(message);
            }
        }
    }
    void Register(Colleague* colleague) {
        colleagues_.push_back(colleague);
    }
private:
    std::vector<Colleague*> colleagues_;
};
// 具体同事类:用户
class User : public Colleague {
public:
    User(const std::string& name) : name_(name) {}
    void Receive(const std::string& message) const override {
        std::cout << name_ << " receives message: " << message << std::endl;
    }
    void Send(const std::string& message) const override {
        mediator_->Send(message, this);
    }
    const std::string& GetName() const {
        return name_;
    }
private:
    std::string name_;
};
int main() {
    // 创建聊天室对象
    ChatRoom chat_room;
    // 创建用户对象
    User alice("Alice");
    User bob("Bob");
    User charlie("Charlie");
    // 注册用户对象到聊天室
    chat_room.Register(&alice);
    chat_room.Register(&bob);
    chat_room.Register(&charlie);
    // 设置用户对象的中介者为聊天室
    alice.SetMediator(&chat_room);
    bob.SetMediator(&chat_room);
    charlie.SetMediator(&chat_room);
    // 用户对象之间发送消息
    alice.Send("Hello, Bob and Charlie!");
    bob.Send("Hi, Alice!");
    charlie.Send("Nice to meet you all!");
    return 0;
}

在上面的代码中,我们首先定义了一个 Mediator 抽象类,其中包含了 Send() 纯虚函数。具体中介者类 ChatRoom 实现了 Send() 函数,以转发消息给其他同事。抽象同事类 Colleague 定义了 Receive() 和 Send() 纯虚函数,用于接收和发送消息。具体同事类 User 实现了 Receive() 和 Send() 函数,以与聊天室中的其他用户交互。

在 main() 函数中,我们首先创建了一个聊天室对象 chat_room,然后创建了三个用户对象 alice、bob 和 charlie,并将它们注册到聊天室中。接着,我们设置了用户对象的中介者为聊天室。最后,我们让用户对象之间发送消息,并观察输出结果。

中介者模式的优点在于它将对象之间的相互作用转移到了中介者对象中,从而降低了对象之间的耦合度。同时,中介者模式也提供了一种集中式的控制方式,使得系统更易于维护和扩展。但是,由于中介者对象需要处理大量的逻辑,因此它可能会成为系统的瓶颈。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值