一、意图:
用一个中介对象来封装一系列的对象交互。终结者使各对象不需要显示地相互调用,从而使其松散耦合,而且可以独立的改变他们之间的交互。
二、类图:
三、组成元素:
i. Mediator:中介者,定义一个接口与各同事对象通信。
ii. ConcreteMediator:具体中介者。
iii. Colleague:同事接口
iv. ConcreteColleage:具体同事类
四、实现代码:
#include <iostream> #include <string> using namespace std; class Colleague; // 中介者类 class Mediator { public: virtual void Send(string message, Colleague* col) = 0; }; // 同事类 class Colleague { public: Colleague(Mediator* temp) { mediator = temp; } protected: Mediator* mediator; }; // 同事一 class ColleagueOne : public Colleague { public: ColleagueOne(Mediator* media) : Colleague(media) { } void Send(string strMessage) { mediator->Send(strMessage, this); } void Notify(string strMessage) { cout << "同事一获得了消息:" << strMessage << endl; } }; // 同事二 class ColleagueTwo : public Colleague { public: ColleagueTwo(Mediator* media) : Colleague(media) { } void Send(string strMessage) { mediator->Send(strMessage, this); } void Notify(string strMessage) { cout << "同事二获得了消息:" << strMessage << endl; } }; // 具体中介者类 class ConcreteMediator : public Mediator { public: ColleagueOne* colOne; ColleagueTwo* colTwo; virtual void Send(string message, Colleague* col); }; void ConcreteMediator::Send(string message, Colleague* col) { if (col == colOne) { colTwo->Notify(message); } else { colOne->Notify(message); } } int main() { ConcreteMediator* m = new ConcreteMediator(); // 让同事认识中介 ColleagueOne* colOne = new ColleagueOne(m); ColleagueTwo* colTwo = new ColleagueTwo(m); // 让中介认识具体的同事类 m->colOne = colOne; m->colTwo = colTwo; colOne->Send("吃饭了吗?"); colTwo->Send("还没吃,你请啊?"); return 0; }