中介者模式属于行为型模式。
定义:采用一个中介对象来封装一系列的对象交互。
优点:使得各个对象不需要显式的相互引用,达到解耦的效果。
UML类图
栗子场景:买房和卖房都担心被骗,然后通过房产中介做交互
代码
#include <iostream>
#include <string>
using namespace std;
class HousePerson;
class BuyHousePerson;
class SellHousePerson;
//抽象中介类
class Mediator{
public:
virtual void sendMessage(string msg, HousePerson *p) = 0;
};
//抽象炒房客
class HousePerson{
public:
HousePerson(Mediator *mediator)
{
m_mediator = mediator;
}
protected:
Mediator *m_mediator;
};
//买房的人
class BuyHousePerson :public HousePerson
{
public:
BuyHousePerson(Mediator *mediator) :HousePerson(mediator){}
void sendMsg(string msg)
{
m_mediator->sendMessage(msg,this);
}
void notify(string msg)
{
cout << "买房者得到消息:" << msg << endl;
}
};
//卖房的人
class SellHousePerson :public HousePerson
{
public:
SellHousePerson(Mediator *mediator) :HousePerson(mediator){}
void sendMsg(string msg)
{
m_mediator->sendMessage(msg, this);
}
void notify(string msg)
{
cout << "卖-房者得到消息:" << msg << endl;
}
};
//具体中介类
class ConcreteMediator :public Mediator
{
public:
void sendMessage(string msg, HousePerson *p)
{
if (p == bh)
{
sh->notify(msg);
}
else
{
bh->notify(msg);
}
}
public:
BuyHousePerson *bh;
SellHousePerson *sh;
};
//客户端
int main()
{
ConcreteMediator *pM = new ConcreteMediator;
BuyHousePerson *pBh = new BuyHousePerson(pM);
SellHousePerson* pSh = new SellHousePerson(pM);
pM->bh = pBh;
pM->sh = pSh;
pBh->sendMsg("卖不卖,一口价780W");
pSh->sendMsg("不卖,至少800W!");
if (pM)
{
delete pM;
pM = nullptr;
}
if (pBh)
{
delete pBh;
pBh = nullptr;
}
if (pSh)
{
delete pSh;
pSh = nullptr;
}
return 0;
}
效果: