概念
该模式会限制对象之间的直接交互,迫使它们通过一个中介者对象进行合作。可用于减少对象之间混乱无序的依赖关系。
代码示例
代码来自这里。
//抽象中介机构
class Mediator
{
public:
virtual void Send(QString message,class Person *sender) {}
virtual void SetA(Person *A) {} //设置其中一方
virtual void SetB(Person *B) {}
};
//抽象人
class Person
{
protected:
class Mediator * mediator; //中介
public:
virtual void SetMediator(Mediator *mediator){} //设置中介
virtual void SendMessage(QString message) {} //向中介发送信息
virtual void GetMessage(QString message) {} //从中介获取信息
};
//房屋中介
class HouseMediator : public Mediator
{
private:
Person * A; //租房者
Person * B; //房东
public:
HouseMediator(): A(0), B(0) {}
void SetA(Person *A)
{
this->A = A;
}
void SetB(Person *B)
{
this->B = B;
}
void Send(QString message, Person * sender)
{
if(sender == A) //租房者给房东发信息
B->GetMessage(message); //房东收到信息
else
A->GetMessage(message);
}
};
//租房者
class Renter: public Person
{
public:
void SetMediator(Mediator *mediator)
{
this->mediator = mediator;
}
void SendMessage(QString message)
{
mediator->Send(message, this);
}
void GetMessage(QString message)
{
qDebug()<<"租房者收到信息"<<message;
}
};
//房东
class Landlord: public Person
{
public:
void SetMediator(Mediator *mediator)
{
this->mediator = mediator;
}
void SendMessage(QString message)
{
mediator->Send(message, this);
}
void GetMessage(QString message)
{
qDebug()<<"房东收到信息:"<<message;
}
};
int main(int argc, char *argv[])
{
Mediator *mediator = new HouseMediator();//房屋中介
Person *person1 = new Renter(); //租房者
Person *person2 = new Landlord(); //房东
mediator->SetA(person1);
mediator->SetB(person2);
person1->SetMediator(mediator);
person2->SetMediator(mediator);
person1->SendMessage("我想在南京路附近租套房子,价格800元一个月");
person2->SendMessage("出租房子:南京路100号,70平米,1000元一个月");
return 0;
}