11.中介者模式

  中介者模式:用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。

          

#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;
}

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值