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

中介者模式

定义:用一个中介者对象封装一系列的对象交互,中介者使各对象不需要显示地相互作用,从而降低耦合,而且可以独立地改变它们之间的交互。

类型:行为类模式

中介者模式的类结构图:


角色:

Mediator抽象中介者:中介者类的抽象父类。

ConcreteMediator:具体的中介者类

Colleague:关联类的抽象父类

ConcreteColleague:具体的关联类

兑现代码:

#include <iostream>
#include"string"

using namespace std;
class Mediator;
class Person
{
public:
	Person(string name,int sex,int condi,Mediator*m)
	{
		m_name = name;
		m_sex = sex;
		m_condi = condi;
		mediator = m;
	}
	int getCondi()
	{
		return m_condi;
	}
	int getSex()
	{
		return m_sex; 
	}
	string getName()
	{
		return m_name; 
	}
	virtual void getParter(Person*p)=0;
	
protected:
	string m_name;
	int m_sex;
	int m_condi;
	Mediator *mediator;
};
class Mediator
{
public:
	void setMan(Person*man)
	{
		pman=man;
	}
	void setWoman(Person*woman)
	{
		pwoman=woman;
	}
	void getParter(Person*p)
	{
		if(pman->getSex()==pwoman->getSex())
		{
			cout<<"同性恋找对象目前不合法。。。。"<<endl;
		}
		if(pman->getCondi()==pwoman->getCondi())
		{
			cout<<pman->getName()<<"和"<<pwoman->getName()<<"绝配。。。。"<<endl;
		}
		else
		{
			cout<<pman->getName()<<"和"<<pwoman->getName()<<"不配。。。。"<<endl;
		}
			
	}
private:
Person *pman;
Person *pwoman;
};
class Woman:public Person
{
public:
	Woman(string name,int sex,int condi,Mediator *m):Person(name,sex,condi,m)
	{
	
	}
	virtual void getParter(Person*p)
	{
		mediator->setMan(p);
		mediator->setWoman(this);
		mediator->getParter(p);
	}
};
class Man:public Person
{
public:
	Man(string name,int sex,int condi,Mediator*m):Person(name,sex,condi,m)
	{
	
	}
	virtual void getParter(Person*p)
	{
		mediator->setMan(this);
		mediator->setWoman(p);
		mediator->getParter(p);
	}
};

void main()
{
	Mediator *mediator = new Mediator;
	Person *xiaofang = new Woman("xiaofang",1,5,mediator);
	Person *zhangsan = new Man("zhangsan",2,4,mediator);
	Person *lisi = new Man("lisi",2,5,mediator);

	xiaofang->getParter(zhangsan);
	xiaofang->getParter(lisi);

	delete lisi;
	delete zhangsan;
	delete xiaofang;
	delete mediator;

	system("pause");
}

中介者模式的场合:

1.一组定义良好的对象,现在要进行复杂的通信。

2.定制一个分布在多个类中的行为,而又不想生成太多的子类。

可以看出,中介对象主要是用来封装行为的,行为的参与者就是那些对象,但是通过中介者,这些对象不用相互知道。

中介者模式的优点:

1.降低了系统对象之间的耦合性,使得对象易于独立的被复用。

2.提高系统的灵活性,使得系统易于扩展和维护。

中介者模式的缺点:

中介者模式的缺点是显而易见的,因为这个“中介“承担了较多的责任,所以一旦这个中介对象出现了问题,那么整个系统就会受到重大的影响。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值