您的位置:首页 > 其它

中介者模式

2015-04-02 16:50 211 查看
#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:用一个中介对象来封装一系列的对象交互,中介者使各对象不需要显示 的相互引用,从而降低耦合;而且可以独立地改变它们之间的交互。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  中介者模式