优点:允许我们公开一个统一的接口,系统的不同部分可以通过该接口进行通信,而不需要显示的相互作用;
适用场景:一个系统的各个组件之间看起来有太多的直接关系,这个时候则需要一个中心控制点,以便各个组件可以通过这个中心控制点进行通信;
#include <iostream>
#include <string>
using namespace std;
class Mediator;
class Person
{
public:
virtual void setMediator(Mediator *mediator) = 0;
virtual void sendMessage(string) = 0;
virtual void getMessage(string) = 0;
protected:
Mediator *_mediator;
};
class Mediator
{
public:
virtual void send(string &, Person *person) = 0;
virtual void setA(Person *) = 0;
virtual void setB(Person *) = 0;
};
class Rental : public Person
{
public:
void setMediator(Mediator *mediator)
{
_mediator = mediator;
}
void sendMessage(string data)
{
_mediator->send(data,this);
}
void getMessage(string data)
{
cout << "Rental get Message:" << data << endl;
}
};
class Landlord : public Person
{
public:
void setMediator(Mediator *mediator)
{
_mediator = mediator;
}
void sendMessage(string data)
{
_mediator->send(data,this);
}
void getMessage(string data)
{
cout << "Landlord get Message:" << data << endl;
}
};
class HouseMediator : public Mediator
{
public:
HouseMediator()
{
_personA = NULL;
_personB = NULL;
}
void setA(Person *a)
{
_personA = a;
}
void setB(Person *b)
{
_personB = b;
}
void send(string &data, Person *person)
{
if(_personA == person)
_personB->getMessage(data);
else
_personA->getMessage(data);
}
private:
Person *_personA;
Person *_personB;
};
int main()
{
Mediator *mediator = new HouseMediator;
Person *person1 = new Rental;
Person *person2 = new Landlord;
mediator->setA(person1);
mediator->setB(person2);
person1->setMediator(mediator);
person2->setMediator(mediator);
person1->sendMessage("I want get house");
person2->sendMessage("I want sell house");
return 0;
}