中介者模式

#include<iostream>
#include <string>
using namespace std;

class Mediator;
class ConcreteColleague1;
class ConcreteColleague2;

class Colleague
{
protected:
    Mediator *mediator;
public:
    Colleague(Mediator *mediator)
    {
        this->mediator=mediator;
    }
};


class ConcreteColleague1:public Colleague
{
public:
    ConcreteColleague1(Mediator *mediator):Colleague(mediator)
    {}
    void send(string message);
    void notify(string message)
    {
        cout<<"同事1得到消息: "<<message<<endl;
    }
};

class ConcreteColleague2:public Colleague
{
public:
    ConcreteColleague2(Mediator *mediator):Colleague(mediator)
    {}
    void send(string message);
    void notify(string message)
    {
        cout<<"同事2得到消息: "<<message<<endl;
    }
};

class Mediator
{
public:
    virtual void send(string name,Colleague *colleague)=0;
};

class ConcreteMediator:public Mediator
{
public:
    ConcreteColleague1 *colleague1;
    ConcreteColleague2 *colleague2;
public:
    void send(string message,Colleague *colleague)
    {
        if(colleague==colleague1)
        {
            colleague2->notify(message);
        }
        else
        {
            colleague1->notify(message);
        }
    }
};


void ConcreteColleague1::send(string message) 
{
    mediator->send(message,this);
}

void ConcreteColleague2::send(string message) 
{
    mediator->send(message,this);
}

int main()
{
    ConcreteMediator *m=new ConcreteMediator();
    ConcreteColleague1 *c1=new ConcreteColleague1(m);
    ConcreteColleague2 *c2=new ConcreteColleague2(m);

    m->colleague1=c1;
    m->colleague2=c2;

    c1->send("吃饭啦");
    c2->send("去 ");

    return 0;
}

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值