中介者模式
定义:用一个中介者对象封装一系列的对象交互,中介者使各对象不需要显示地相互作用,从而降低耦合,而且可以独立地改变它们之间的交互。
类型:行为类模式
中介者模式的类结构图:
角色:
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.提高系统的灵活性,使得系统易于扩展和维护。
中介者模式的缺点:
中介者模式的缺点是显而易见的,因为这个“中介“承担了较多的责任,所以一旦这个中介对象出现了问题,那么整个系统就会受到重大的影响。