/* Colleague叫做抽象同事类,而ConcreteColleague是具体同事类, * 每个具体同事只知道自己的行为,而不了解其他同事类的情况,而 * 它们却都认识中介者对象,Mediator是抽象中介者,定义了同事对 * 象到中介者对象的接口,ConcreteMediator是具体中介者对象,实 * 现抽象类的方法,它需要知道具体同事类,并从具体同事接收消息, * 向具体同事对象发出命令。 */ // Mediator类,抽象中介者 class Mediator { public: virtual void Send(string message,Colleague* colleague) = 0; }; // Colleague类 抽象同事类 class Colleague { protected: Mediator *mediator; public: Colleague(Mediator *mediator) { this->mediator = mediator; } }; // ConcreteMediator类, 具体中介者 class ConcreteMediator : public Mediator { private: ConcreteColleague1 *colleague1; ConcreteColleague2 *colleague2; public: void setColleague1(ConcreteColleague1 *colleague1) { this->colleague1 = colleague1; } // ConcreteColleague2的set方法 virtual void Send(string message,Colleague* colleague) { if( colleague == colleague1 ) { colleague2->Notify( message ); } else { colleague1->Notify( message ); } } }; // ConcreteColleague1和ConcreteColleague2等各种同事对象 class ConcreteColleague1 : public Colleague { public: ConcreteColleague1( Mediator *mediator) : Colleague( mediator ) {} void Send( string message ) { mediator->Send( message, this ); } void Notify( string message ) { printf("同事1得到消息: %s",message); } }; ... // 客户端 int main() { ConcreteMediator *m = new ConcreteMediator(); ConcreteColleague1 *c1 = new ConcreteColleague1( m ); // 让两个具体同事类认识中介者对象 ConcreteColleague2 *c2 = new ConcreteColleague2( m ); m->Colleague1 = c1; m->Colleague2 = c2; c1->Send("吃饭了吗?"); c2->Send("没有呢,你打算请客?"); }