#include <iostream.h>
//中介者模式
class contry
{
public:
contry(){}
virtual ~contry(){}
public:
virtual void sendmessage(char *str) = 0 ;
virtual void getmessage(char *str) = 0 ;
};
class Medi //中介抽象类
{
public:
Medi(){}
virtual ~Medi(){}
public:
virtual void ExchangeMessage(char *str , contry *con) = 0; //交换信息
virtual void setc1(contry *c1) = 0;
virtual void setc2(contry *c2) = 0;
};
class con1 : public contry
{
protected:
Medi *medi;
public:
con1(Medi *medi):medi(medi){}
virtual ~con1(){delete medi;}
public:
virtual void sendmessage(char *str)
{
this->medi->ExchangeMessage(str,this);
}
virtual void getmessage(char *str)
{
cout << "获取con2的信息" << str << endl;
}
};
class con2 : public contry
{
protected:
Medi *medi;
public:
con2(Medi *medi):medi(medi){}
virtual ~con2(){delete medi;}
public:
virtual void sendmessage(char *str)
{
this->medi->ExchangeMessage(str,this);
}
virtual void getmessage(char *str)
{
cout << "获取con1的信息" << str << endl;
}
};
class ConcreteMedi : public Medi //具体中介者
{
private:
contry *c1;
contry *c2;
public:
ConcreteMedi(){}
virtual ~ConcreteMedi(){}
public:
void setc1(contry *c1)
{
this->c1 = c1;
}
void setc2(contry *c2)
{
this->c2 = c2;
}
virtual void ExchangeMessage(char *str , contry *con)
{
if(c1 == con)
c2->getmessage(str);
if(c2 == con)
c1->getmessage(str);
}
};
void main()
{
Medi *medi = new ConcreteMedi();
//中介者和各交涉方是相互知道的 相互聚合
con1 *c1 = new con1(medi);
con2 *c2 = new con2(medi);
medi->setc1(c1);
medi->setc2(c2);
c1->sendmessage("con2不要发展核武");
c2->sendmessage("con1我没发展核武");
}