C++設計模式淺識中介者模式

來源:互聯網
上載者:User
中介者模式(Mediator):用一個中介對象來封裝一系列的對象互動。中介者使各對象不需要顯式地互動引用,從而使耦合鬆散,而且可以獨立地改變它們之間的互動。

四個角色:

抽象中介者Mediator

具體中介者對象ConcreteMediator

抽象類別Abstract

具體抽象類別ConcreteAbstract

中介者模式優點:

Mediator的出現減少了各個Abstract的耦合,使得可以獨立地改變和複用各個Abstract類和Mediator。

由於把對象如何協作進行了抽象,將中介作為一個獨立的概念並將其封裝在一個對象中,這樣關注的對象就從對象各自本身的行為轉移到它們之間的互動上來,也就是站在一個更客觀的角度去看待系統。

中介者模式缺點:

由於ConcreteMediator控制了集中化,於是就把互動複雜性變為了中介者的複雜性,這就使得中介者會變得比任何一個ConcreteAbstract都負責。

模式實現:

[code]//前向聲明class Abstract;//中介者抽象類別class Mediator{public:    virtual void Send(std::string message, Abstract *abstract){}};//抽象類別class Abstract{protected:    Mediator *mediator;public:    //構造中介者    Abstract(Mediator *mediator){        this->mediator = mediator;    }};//具體抽象類別1class ConcreteAbstract1: public Abstract{public:    ConcreteAbstract1(Mediator *me):Abstract(me){}    void Send(std::string message){        //中介者送出去        mediator->Send(message, this);    }    void Notify(std::string message){        std::cout << "ConcreteAbstract1 receive message: " << message << "   ---(From ConcreteAbstract2)" << std::endl;    }};//具體抽象類別2class ConcreteAbstract2: public Abstract{public:    ConcreteAbstract2(Mediator *me):Abstract(me){}    void Send(std::string message){        //中介者送出去        mediator->Send(message, this);    }    void Notify(std::string message){        std::cout << "ConcreteAbstract2 receive message: "  << message << "   ---(From ConcreteAbstract1)" << std::endl;    }};//具體中介者class ConcreteMediator: public Mediator{private:    //需瞭解所存的具體抽象類別對象    ConcreteAbstract1 *CA1;    ConcreteAbstract2 *CA2;public:    ConcreteMediator(){}    void setConcreteMediator(ConcreteAbstract1 *CA1, ConcreteAbstract2 *CA2){        this->CA1 = CA1;        this->CA2 = CA2;    }    virtual void Send(std::string message, Abstract *abstract){        if(abstract == CA1)            CA2->Notify(message);        else            CA1->Notify(message);    }};

用戶端:

[code]//Clientint main(){    ConcreteMediator *m = new ConcreteMediator;    //具體的抽象這認識具體的中介者    ConcreteAbstract1 *ca1 = new ConcreteAbstract1(m);    ConcreteAbstract2 *ca2 = new ConcreteAbstract2(m);    //讓中介者認識兩個具體的抽象類別    m->setConcreteMediator(ca1, ca2);    ca1->Send("Hello");  //Output: ConcreteAbstract2 receive message: Hello   ---(From ConcreteAbstract1)    ca2->Send("Hi");    //Output: ConcreteAbstract1 receive message: Hi   ---(From ConcreteAbstract2)     if(m != NULL){        delete m;        m = NULL;    }    if(ca1 != NULL){        delete ca1;        ca1 = NULL;    }    if(ca2 != NULL){        delete ca2;        ca2 = NULL;    }    return 0;}

以上就是C++設計模式淺識中介者模式的內容,更多相關內容請關注topic.alibabacloud.com(www.php.cn)!

  • 相關文章

    聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.