/************************************************************************/
/* 中介者模式 */
/************************************************************************/
/*
场景:假如你新到一家公司,你对和你一组同时Colleague不了解,他对你也不了
这时你们就需要由另一个你们都认识人作为中介来进行相互通信,这有点类似于
网路编程中的cs架构
*/
#include <IOSTREAM>
using namespace std;
class Mediator;
/*抽象出同事类*/
class Colleague
{
protected:
Mediator *mediator;
public:
Colleague(Mediator *mediator)
{
this->mediator = mediator;
}
};
//抽象出中介者
class Mediator
{
public:
virtual void Send(char *message,Colleague *colleague) = 0;
};
//抽象出具体的同事
class ConcreteColleague1 : public Colleague
{
public:
ConcreteColleague1(Mediator *mediator):Colleague(mediator)
{
}
public:
void Send(char *message)
{
mediator->Send(message,this);
}
void Notify(char *message)
{
cout<<"同事1得到信息:"<<message<<endl;
}
};
//抽象出具体的同事
class ConcreteColleague2 : public Colleague
{
public:
ConcreteColleague2(Mediator *mediator):Colleague(mediator)
{
}
public:
void Send(char *message)
{
mediator->Send(message,this);
}
void Notify(char *message)
{
cout<<"同事2得到信息:"<<message<<endl;;
}
};
//具体的中介者类
class ConcreteMeditor : public Mediator
{
private:
ConcreteColleague1 *colleague1;
ConcreteColleague2 *colleague2;
public:
ConcreteMeditor()
{
this->colleague1 = colleague1;
this->colleague2 = colleague2;
}
void Send(char *message,Colleague *colleague)
{
if(colleague == colleague1)
{
colleague2->Notify(message);
}else
{
colleague1->Notify(message);
}
}
void Set(ConcreteColleague1 *colleague1,ConcreteColleague2 *colleague2)
{
this->colleague1 = colleague1;
this->colleague2 = colleague2;
}
};
void main()
{
ConcreteMeditor *m = new ConcreteMeditor;
ConcreteColleague1 *c1 = new ConcreteColleague1(m);
ConcreteColleague2 *c2 = new ConcreteColleague2(m);
m->Set(c1,c2);
c1->Send("你吃过饭了?(同事1发送)");
c2->Send("没有(同事2发送)");
}