行为设计模式---中介者模式(Mediator)

本文深入探讨了中介者模式的概念、定义及其在QQ聊天室等场景的应用。通过C++代码实例,展示了如何使用中介者模式来封装对象间的交互,减少耦合度,提高代码的灵活性和可维护性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 中介者模式:定义一个对象封装一系列多个对象如何相互作用,使得对象间不需要显式地相互引用,
从而使其耦合更加松散,并且还让我们可以独立变化多个对象相互作用。如QQ聊天室

#include <iostream>
#include <map>
#include <string>
#include <string.h>
using namespace std;

class Colleague;
class IMediator
{
public:
        virtual ~IMediator() {}
        virtual void add(Colleague *) = 0;
        virtual void notify(const char *from, const char *to, const char *msg) = 0;
};

class Colleague
{
public:
        Colleague(const char *name)
        {
                strcpy(name_, name);
        }
        virtual ~Colleague()
        {}
        char *getName()
        {
                return name_;
        }
        void setMediator(IMediator *mediator)
        {
                mediator_ = mediator;
        }
        void send(const char *to, const char *msg)
        {
                mediator_->notify(name_, to, msg);
        }
        void receive(const char *from, const char *msg)
        {
                cout << from << " to " << name_ << " : " << msg << endl;
        }

private:
        IMediator *mediator_;
        char name_[32];
};

class Mediator : public IMediator
{
public:
        ~Mediator()
        {}
        void add(Colleague *colleague)
        {
                pool[colleague->getName()] = colleague;
                colleague->setMediator(this);
        }

        void notify(const char *from, const char *to, const char *msg)
        {
                Colleague *colleague = pool[to];
                colleague->receive(from, msg);
        }

private:
        map<string, Colleague *> pool;
};

int main()
{
        Colleague Collin("Collin");
        Colleague Lola("Lola");
        Mediator mediator;

        mediator.add(&Collin);
        mediator.add(&Lola);

        Collin.send("Lola", "Hello, Lola");
        Lola.send("Collin", "Hi, this is Lola");

        return 0;
}

 


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值