c++设计模式之中介者模式

/************************************************************************/
/*                           中介者模式                                 */
/************************************************************************/



/*
	场景:假如你新到一家公司,你对和你一组同时Colleague不了解,他对你也不了
	这时你们就需要由另一个你们都认识人作为中介来进行相互通信,这有点类似于
	网路编程中的cs架构
*/

#include <IOSTREAM>


using namespace std;



class Mediator;
/*抽象出同事类*/
class Colleague
{
protected:
	Mediator *mediator;



public:
	Colleague(Mediator *mediator)
	{
		this->mediator = mediator;
	}


};

//抽象出中介者
class Mediator
{
public:
	virtual void Send(char *message,Colleague *colleague) = 0;
};




//抽象出具体的同事
class ConcreteColleague1 : public Colleague
{
public:
	ConcreteColleague1(Mediator *mediator):Colleague(mediator)
	{

	}


public:
	void Send(char *message)
	{
		mediator->Send(message,this);
	}


	void Notify(char *message)
	{
		cout<<"同事1得到信息:"<<message<<endl;
	}

};


//抽象出具体的同事
class ConcreteColleague2 : public Colleague
{
public:
	ConcreteColleague2(Mediator *mediator):Colleague(mediator)
	{
		
	}
	
	
public:
	void Send(char *message)
	{
		mediator->Send(message,this);
	}
	
	
	void Notify(char *message)
	{
		cout<<"同事2得到信息:"<<message<<endl;;
	}
	
};









//具体的中介者类
class ConcreteMeditor : public Mediator
{
private:
	ConcreteColleague1 *colleague1;
	ConcreteColleague2 *colleague2;


public:
	ConcreteMeditor()
	{
		this->colleague1 = colleague1;
		this->colleague2 = colleague2;
	}


	void Send(char *message,Colleague *colleague)
	{
		if(colleague == colleague1)
		{
			colleague2->Notify(message);
		}else
		{
			colleague1->Notify(message);
		}
	}


	void Set(ConcreteColleague1 *colleague1,ConcreteColleague2 *colleague2)
	{
		this->colleague1 = colleague1;
		this->colleague2 = colleague2;
	}

};






void main()
{


	ConcreteMeditor *m = new ConcreteMeditor;


	ConcreteColleague1 *c1 = new ConcreteColleague1(m);
	ConcreteColleague2 *c2 = new ConcreteColleague2(m);

	m->Set(c1,c2);



	c1->Send("你吃过饭了?(同事1发送)");
	c2->Send("没有(同事2发送)");


	
}


 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值