【设计模式】之十Mediator

Type: Behavioral

Mediator: 定义一个对象,包装一系列对象如何交互。这些对象不必明确地互相引用,从而促进松散耦合,并且能够使你独立地改变他们之间的交互。

#include <iostream>
using namespace std;


class Mediator
{
public:
    virtual void inform(int id)=0;
};


class Colleague
{
public:
    virtual void update()=0;
};


class ConcreteColleague: public Colleague
{
public:
    ConcreteColleague(int id, Mediator* pMediator): mId(id),m_pMediator(pMediator){};
    void update()
    {
        cout<<"ConcreteColleague"<<mId<<" update"<<endl;
    };
    void send()
    {
        cout<<"ConcreteColleague"<<mId<<" send"<<endl;
        if(mId == 1)
            m_pMediator->inform(2);
        else if(mId == 2)
            m_pMediator->inform(1);
    };
private:
    int mId;
    Mediator* m_pMediator; 
};


class ConcreteMediator: public Mediator
{
public:
    void inform(int id)
    {
        if(id==1){
            m_pColleague1->update();
        } else if(id == 2){
            m_pColleague2->update();
        }
    };
    void setColleague1(Colleague* pColleague)
    {
        m_pColleague1 = pColleague;
    };
    void setColleague2(Colleague* pColleague)
    {
        m_pColleague2 = pColleague;
    };
private:
    Colleague* m_pColleague1;
    Colleague* m_pColleague2;
};


int main()
{
    ConcreteMediator* pMediator = new ConcreteMediator();
    ConcreteColleague* pColleague1 = new ConcreteColleague(1, pMediator);
    ConcreteColleague* pColleague2 = new ConcreteColleague(2, pMediator);
    pMediator->setColleague1(pColleague1);
    pMediator->setColleague2(pColleague2);
	
    pColleague1->send();
    pColleague2->send();
	
    system("pause");
    return 0;
}



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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值