设计模式 - 中介者模式

    xiaoxiao2025-03-23  18

    //   设计模式:中介者模式,即用一个中介来封装一系列的对象交互。中介者使各对象不需要显示地互相引用,从而使其耦合松散,而且可以独立的改变他们之间的交互。 [8/13/2016 ZOSH];

    //  应用场景:1.解决软件规模变大时,对象间复杂的通信关系;2. 将通信的复杂性单独抽离出来维护;

    //   模式说明:结构图如下(其中图片摘自《大话设计模式》,提交后文档排版不太好);

    //    完整代码:http://download.csdn.net/detail/z444_579/9603020

    //    简要代码:

    // Colleague类 class Mediator; // //   说明:抽象同事类 [8/13/2016 ZOSH]; class Colleague { public: Colleague(void); virtual~Colleague(void); public: //   说明:重载构造方法, 得到中介者对象 [8/13/2016 ZOSH]; Colleague(Mediator* pMediator)  { m_pMediator = pMediator; } protected: // 指向中介者; Mediator* m_pMediator; };

    //.cpp文件;

    Colleague::Colleague(void) { m_pMediator = NULL; } Colleague::~Colleague(void) { }

    // Colleague1 类

    #include "Colleague.h"

    // 提前声明,但不包含头文件(头文件应多在cpp文件添加); class Mediator; // 具体同事类; class Colleague1 : public Colleague { public: Colleague1(void) {}; virtual~Colleague1(void) {}; public: Colleague1(Mediator* pMediator) : Colleague(pMediator) { } //   说明:发送信息,内部调用中介者发送信息 [8/13/2016 ZOSH]; void Send(string strMessage); //   说明:本类感知信息 [8/13/2016 ZOSH]; void Notify(string strMessage); };

    // .cpp 

    #include "Mediator.h" void Colleague1::Send(string strMessage) { m_pMediator->Send(strMessage,this); } void Colleague1::Notify(string strMessage) { cout<<"同事一获得了消息"<<strMessage<<endl; }

    // 添加Colleague2,与Colleague1类似

    class Colleague; //   说明:抽象中介类 [8/13/2016 ZOSH]; class Mediator { public: Mediator(void) {}; virtual ~Mediator(void) {}; virtual void Send(string message, Colleague* pColleague) = 0; };

    class Colleague; class Colleague1; class Colleague2; #include "Mediator.h" // 具体中介者类; class ConcreteMediator : public Mediator { public: ConcreteMediator(void); ~ConcreteMediator(void); public: // 需要了解所有的同事具体对象 Colleague1 * m_pColleague1; Colleague2 * m_pColleague2; // 重载Send 函数,根据对象作出选择判断,通知对象; void Send(string message, Colleague* pColleague); };

    // 客户端代码;

    #include "stdafx.h" #include "ConcreteMediator.h" #include "Colleague1.h" #include "Colleague2.h" //   中介者模式:用一个中介来封装一系列的对象交互。中介者使各对象不需要显示地互相引用,从而使其耦合松散,而且可以独立的改变他们之间的交互。 [8/13/2016 ZOSH]; //   说明:[8/13/2016 ZOSH]; int _tmain(int argc, _TCHAR* argv[]) { // 具体中介者; ConcreteMediator *pConcreteMediator = new ConcreteMediator(); // 让同事认识中介; Colleague1* pColleague1 = new Colleague1(pConcreteMediator); Colleague2* pColleague2 = new Colleague2(pConcreteMediator); //让中介认识具体的同事类; pConcreteMediator->m_pColleague1 = pColleague1; pConcreteMediator->m_pColleague2 = pColleague2; pColleague1->Send("吃饭了吗?"); pColleague2->Send("还没吃,你请吗?"); //   说明:清除相关指针和内存 [8/13/2016 ZOSH]; if (pConcreteMediator) { delete pConcreteMediator; pConcreteMediator = NULL; } if (pColleague1) { delete pColleague1; pColleague1 = NULL; } if (pColleague2) { delete pColleague2; pColleague2 = NULL; } return 0; }

    转载请注明原文地址: https://ju.6miu.com/read-1297330.html
    最新回复(0)