中介者模式:用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。
#include <iostream>
#include <string>
using namespace std;
class Mediator;
class Person
{
public:
virtual void set_mediator(Mediator* mediator) = 0; // 设置中介
virtual void send_message(string message) = 0; // 向中介发送信息(包租婆)
virtual void get_message(string message) = 0; // 从中介获取信息(租客)
protected:
Mediator* pMediator;
};
// 中介抽象类
class Mediator
{
public:
virtual void set_renter(Person* renter) = 0; // 设置是租客还是包租婆
virtual void set_landlady(Person* Landlady) = 0;
virtual void send(string message, Person* person) = 0;
};
// 租客
class Renter : public Person
{
public:
void set_mediator(Mediator* mediator)
{
pMediator = mediator;
}
void send_message(string message)
{
pMediator->send(message, this);
}
void get_message(string message)
{
cout << "租房者收到消息: " << message << endl;
}
};
// 包租婆
class LandLady : public Person
{
public:
void set_mediator(Mediator *mediator)
{
pMediator = mediator;
}
void send_message(string message)
{
pMediator->send(message, this);
}
void get_message(string message)
{
cout << "房东收到信息: " << message << endl;
}
};
// 房屋中介
class HouseMediator : public Mediator
{
public:
HouseMediator() : pRenter(0), pLandlady(0) {}
void set_renter(Person* renter)
{
pRenter = renter;
}
void set_landlady(Person* Landlady)
{
pLandlady = Landlady;
}
void send(string message, Person* person)
{
if (person == pRenter) // 租房给房东发信息
pLandlady->get_message(message); // 房东收到信息
else
pRenter->get_message(message);
}
private:
Person* pRenter; // 租房者
Person* pLandlady; // 房东
};
void test_01()
{
Mediator *mediator = new HouseMediator();
// 租房者
Person* renter = new Renter();
mediator->set_renter(renter);
renter->set_mediator(mediator);
renter->send_message("我想在上沙附近租套房子,价格1600元一个月");
// 房东
Person* landlady = new LandLady();
mediator->set_landlady(landlady);
landlady->set_mediator(mediator);
landlady->send_message("出租房子:上沙椰树村100号,20平米,1800元一个月");
delete renter;
delete landlady;
delete mediator;
}
int main()
{
test_01();
system("pause");
return 0;
}