用一个中介对象来封装一系列的对象交互,中介者使各对象不需要显示的相互引用,从而降低耦合;而且可以独立地改变它们之间的交互。
#include <iostream>
using namespace std;
#include "string"
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;
}
string getName()
{
return m_name;
}
int getSex()
{
return m_sex;
}
int getCondi()
{
return m_condi;
}
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;
}
public:
virtual void getParter()
{
if (pWoman->getSex() == pMan->getSex())
{
cout << "同性恋 之间 不能找对象 " << endl;
return;
}
if (pWoman->getCondi() == pMan->getCondi())
{
cout << pWoman->getName() << " 和 " << pMan->getName() << "绝配 " << endl;
}
else
{
cout << pWoman->getName() << " 和 " << pMan->getName() << "不配 " << endl;
}
}
private:
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();
}
};
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(); //找对象
}
};
void main()
{
//string name, int sex, int condi
Mediator *m = new Mediator;
Person *xiaofang = new Woman("小芳", 2, 5, m);
Person *zhangsan = new Man("张三", 1, 4, m);
Person *lisi = new Man("李四", 1, 5, m);
xiaofang->getParter(zhangsan);
xiaofang->getParter(lisi);
delete m;
delete xiaofang;
delete zhangsan;
delete lisi;
cout << "hello..." << endl;
system("pause");
return;
}