Mediator 中介者模式

中介者模式主要用于对象之间的通信

Mediator.h文件:

#include "stdafx.h"
#include <boost/shared_ptr.hpp>
#include <boost/make_shared.hpp>
#include <string>
#include <iostream>
#include <boost/format.hpp>
#include <boost/enable_shared_from_this.hpp>

using namespace boost;

typedef std::string ColleageAData;
typedef long ColleageBData;

class Mediator;

class Colleage
{
protected:
	shared_ptr<Mediator> _m_mediator;
};

class ColleageA : public Colleage
{
public:
	ColleageA(){m_data = "asdf";m_recvBData = 0;};
	void setMediator(shared_ptr<Mediator> mediator);
	void sendDataToColleageB(ColleageAData data);

	void setData(ColleageAData data){m_data = data;}
	ColleageAData getData(){return m_data;}

	void showInfo()
	{
		std::cout << "A:" << m_data << "B:" << m_recvBData << std::endl;
	}
public:
	ColleageBData m_recvBData;
	ColleageAData m_data;
};

class ColleageB : public Colleage
{
public:
	ColleageB(){m_data = 1113;m_recvAData = "null";}
	void setMediator(shared_ptr<Mediator> mediator);
	void sendDataToColleageA(ColleageBData data);
	void setData(ColleageBData data){m_data = data;}
	ColleageBData getData(){return m_data;}
	void showInfo()
	{
		std::cout << "B:" << m_data << "A:" << m_recvAData << std::endl;
	}
public:
	ColleageAData m_recvAData;
	ColleageBData m_data;
};

class Mediator
{
public:
	Mediator(){}
	virtual ~Mediator(){}
	Mediator(shared_ptr<ColleageA> a,shared_ptr<ColleageB> b)
	{
		_m_A = a;
		_m_B = b;
	}

	void AsendtoB(ColleageAData dataA);

	void BsendtoA(ColleageBData dataB);

	void setA(shared_ptr<ColleageA> a)
	{
		_m_A = a;
	}

	void setB(shared_ptr<ColleageB> b)
	{
		_m_B = b;
	}

protected:
	//该中介者用于处理A和B
	shared_ptr<ColleageA> _m_A;
	shared_ptr<ColleageB> _m_B;
};
Mediator.cpp文件:

#include "stdafx.h"
#include <boost/shared_ptr.hpp>
#include <boost/make_shared.hpp>
#include <string>
#include <iostream>
#include <boost/format.hpp>
#include <boost/enable_shared_from_this.hpp>
#include "Mediator.h"

using namespace boost;

void Mediator::AsendtoB(ColleageAData dataA)
{
	_m_B->m_recvAData = dataA;
}

void Mediator::BsendtoA(ColleageBData dataB)
{
	_m_A->m_recvBData = dataB;
}
void ColleageA::setMediator(shared_ptr<Mediator> mediator)
{
	_m_mediator = mediator;
}
void ColleageA::sendDataToColleageB(ColleageAData data)
{
	_m_mediator->AsendtoB(data);
}
void ColleageB::setMediator(shared_ptr<Mediator> mediator)
{
	_m_mediator = mediator;
}
void ColleageB::sendDataToColleageA(ColleageBData data)
{
	_m_mediator->BsendtoA(data);
}


void testMediatorMode()
{
	shared_ptr<ColleageA> a = make_shared<ColleageA>();
	auto b = make_shared<ColleageB>();
	auto mediator = make_shared<Mediator>();
	a->setMediator(mediator);
	b->setMediator(mediator);
	mediator->setA(a);
	mediator->setB(b);
	a->showInfo();
	b->showInfo();
 	a->sendDataToColleageB(a->getData());
	a->showInfo();
	b->showInfo();
	b->sendDataToColleageA(b->getData());
	a->showInfo();
	b->showInfo();
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值