美文网首页
行为模式2-中介者模式

行为模式2-中介者模式

作者: sunblog | 来源:发表于2018-04-16 23:14 被阅读0次

    行为模式2-中介者模式

    中介者模式 Mediator

    意图

    用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显示地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。

    问题思考

    面向对象设计鼓励将行为分布到各个对象中。这种分布可能会导致对象间有许多连接。在最坏的情况下,每一个对象都知道其它所有对象。

    适用性

    • 一组对象通过定义良好但是复杂的方式进行通信。产生的相互依赖关系结构混乱且难以理解。
    • 一个对象引用其他很多对象并且直接与这些对象通信,导致难以复用该对象

    类图

    mediator

    实现

    class Mediator {
    public:
        void Operation1() {
            mObj1->Operation1();
        }
    
        void Operation2() {
            mObj2->Operation2();
        }
    
        void Operation3() {
            mObj3->Operation3();
        }
    
    private:
        ConcreteColleague1 *mObj1 = nullptr;
        ConcreteColleague2 *mObj2 = nullptr;
        ConcreteColleague3 *mObj3 = nullptr;
    };
    
    class ConcreteColleague1 {
    public:
        explicit ConcreteColleague1(Mediator *mediator) { mMediator = mediator; }
    
        void Operation1() {
            mMediator->Operation2();
        }
    
    private:
        Mediator *mMediator = nullptr;
    };
    
    class ConcreteColleague2 {
    public:
        explicit ConcreteColleague2(Mediator *mediator) { mMediator = mediator; }
    
        void Operation2() {
            std::cout << "Hello mediator 2" << std::endl;
            mMediator->Operation3();
        }
    
    private:
        Mediator *mMediator = nullptr;
    };
    
    class ConcreteColleague3 {
    public:
        void Operation3() {
            std::cout << "Hello Mediator" << std::endl;
        }
    
    private:
        Mediator *mMediator = nullptr;
    };
    
    

    注意:在中介模式中,每一个同事类都知道它的中介者对象。每一个同事对象在需要与其他的同事通信的时候,与它的中介者通信。

    Mediator和Facade:Mediator的目的是简化对象间通信,各对象只知道Mediator而不知道Colleague对象。Facade的目的是封装子系统,简化客户的访问。Mediator模式中,各对象只能通过mediator通信,这种通信可以是双向的。Facade模式中,只能通过facade访问子对象,子对象不能访问facade,这种同性方式是单向的。

    相关文章

      网友评论

          本文标题:行为模式2-中介者模式

          本文链接:https://www.haomeiwen.com/subject/wvpykftx.html