C++中介模式

学了C++基本的语法都知道继承可以让子类拥有更多的功能,除了继承还有组合,委托,也能让一个类的功能增加。设计模式,这个设计是设计继承,组合,委托,之间相互叠加的方式,让其符合业务需求。
中介模式是对委托的复杂运用,比如说两个类中,类A中含类B的对象指针作为数据成员,类B中含类A的对象指针作为数据成员。在下面的例子中,中介含有租房者和房东的对象指针,租房者和房东也含有中介的对象指针。完成业务,租房者可以运用其包含的中介对象指针发送给中介包含的房东类的对象的函数成员。房东发送给租房者也一样,具体见代码。
这些代码都是在学习这些的过程中码的。。。。。

#include <iostream>
#include <string>
using namespace std;

class Mediator;
//抽象人
class Person
{
protected:
	Mediator* m_mediater;//中介
public:
	//设置中介
	virtual void SetMediator(Mediator* mediator){}
	//向中介发送信息,中介最终发给租房者或房东
	virtual void SendMessage(string message){}
	//从中介获得信息,该信息是租房者或房东发的信息
	virtual void GetMessage(string message){}
};

//抽象中介机构
class Mediator
{
public:
	//发送信息给租房者或房东
	virtual void Send(string message, Person* person){}
	//设置租房者
	virtual void SetA(Person* A){}
	//设置房东
	virtual void SetB(Person* B){}
};

//租房者
class Renter : public Person
{
public:
	//设置中介
	void SetMediator(Mediator* mediator)
	{
		m_mediater = mediator;
	}
	//发送信息
	void SendMessage(string message)
	{
		m_mediater->Send(message, this);
	}
	//获得信息
	void GetMessage(string message)
	{
		cout << "租房者接收到信息:" << message << endl;
	}
};

//房东
class Landlord : public Person
{
public:
	//设置中介
	void SetMediator(Mediator* mediator)
	{
		m_mediater = mediator;
	}
	//发送信息
	void SendMessage(string message)
	{
		m_mediater->Send(message, this);
	}
	//接受信息
	void GetMessage(string message)
	{
		cout << "房东接收到信息:" << message << endl;
	}
};

//房屋中介
class HouseMediator : public Mediator
{
private:
	Person* m_A;//租房者
	Person* m_B;//房东
public:
	//设置租房者
	void SetA(Person* A)
	{
		m_A = A;
	}
	//设置房东
	void SetB(Person* B)
	{
		m_B = B;
	}
	void Send(string message, Person* person)
	{
		if (person == m_A)//租房者给房东发信息
		{
			m_B->GetMessage(message);
		}
		else
		{
			m_A->GetMessage(message);
		}
	}

};


void test01()
{
	Mediator* mediator = new HouseMediator;
	Person* renter = new Renter;
	Person* landlord = new Landlord;
	mediator->SetA(renter);
	mediator->SetB(landlord);

	renter->SetMediator(mediator);
	landlord->SetMediator(mediator);
	renter->SendMessage("我想在宝安租房子,880一月\n");
	landlord->SendMessage("出租房子:宝安,1000一月");
}



int main(void)
{
	test01();
	system("pause");
	return 0;
}
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

、、、、南山小雨、、、、

分享对你有帮助,打赏一下吧!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值