Mediator 中介者模式

 

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

例:

#include <iostream>

#include <string>

#include <vector>

using namespace std;

 

class Colleague;

//中介者类

class Mediator

{

public:

       virtual void Send(string message,Colleague* col) = 0;

};

//抽象同事类

class Colleague

{

protected:

       Mediator* mediator;

public:

       Colleague(Mediator* temp)

       {

              mediator = temp;

       }

};

//同事一

class Colleague1 : public Colleague

{

public:

       Colleague1(Mediator* media) : Colleague(media){}

 

       void Send(string strMessage)

       {

              mediator->Send(strMessage,this);

       }

 

       void Notify(string strMessage)

       {

              cout<<"同事一获得了消息"<<strMessage<<endl;

       }

};

 

//同事二

class Colleague2 : public Colleague

{

public:

       Colleague2(Mediator* media) : Colleague(media){}

 

       void Send(string strMessage)

       {

              mediator->Send(strMessage,this);

       }

 

       void Notify(string strMessage)

       {

              cout<<"同事二获得了消息"<<strMessage<<endl;

       }

};

 

//具体中介者类

class ConcreteMediator : public Mediator

{

public:

       Colleague1 * col1;

       Colleague2 * col2;

       virtual void Send(string message,Colleague* col)

       {

              if(col == col1)

                     col2->Notify(message);

              else

                     col1->Notify(message);

       }

};

 

//客户端:

int main()

{

       ConcreteMediator * m = new ConcreteMediator();

 

       //让同事认识中介

       Colleague1* col1 = new Colleague1(m);

       Colleague2* col2 = new Colleague2(m);

 

       //让中介认识具体的同事类

       m->col1 = col1;

       m->col2 = col2;

 

       col1->Send("吃饭了吗?");

       col2->Send("还没吃,你请吗?");

       return 0;

}

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值