行为模式2-中介者模式

行为模式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-中介者模式)