我的理解是将让两个对象不直接交互,而是通过一个中介类把这两个对像都封装在里面,这两个对象要想传递信息就必须通过这个中介类来实现。
下面是一个 房东 租客 中介公司的例子
uml类图如下
这个图显示了本代码所有的逻辑关系:
#include <iostream>
#include <cstring>
using namespace std;
class Person; //注意类的使用
class Mediator
{
public:
virtual void setLand(Person *p) = 0;
virtual void setRent(Person *p) = 0;
virtual void get_send_msg(string msg, Person *p) = 0;
protected:
Person *land;
Person *rent;
};
class Person
{
public:
virtual void setMedia(Mediator *m) = 0;
virtual void getMsg(string s) = 0;
virtual void sendMsg(string msg) = 0;
protected:
Mediator *media; //注意指针还是变量
}; //注意类的定义后加上;
#include "media.h"
#include <cstring>
class Land : public Person //房东类
{
public:
void setMedia(Mediator *m){
media = m;
}
void getMsg(string msg){
cout << "房东得到消息: " << msg << endl;
}
void sendMsg(string msg){
media->get_send_msg(msg, this);
}
};
class Rent : public Person //租客类
{
public:
void setMedia(Mediator *m){
media = m;
}
void getMsg(string msg){
cout << "租客得到消息: " << msg << endl;
}
void sendMsg(string msg){
media->get_send_msg(msg, this);
}
};
class HouseMedia : public Mediator //中介公司类
{
public:
void setLand(Person *p){
land = p;
}
void setRent(Person *pe){
rent = pe;
}
void get_send_msg(string msg, Person *p){
if(p==land)
rent->getMsg(msg); //注意命名要用心
else if(p==rent)
land->getMsg(msg);
}
};
int main()
{
Mediator *house = new HouseMedia;
Person *l = new Land;
Person *r = new Rent;
l->setMedia(house);
r->setMedia(house);
house->setLand(l);
house->setRent(r);
string msg = " 我要chu租房 ...";
l->sendMsg(msg);
delete house;
delete l;
delete r;
return 0;
}