【JAVA设计模式】17.中介者模式

对象之间不直接交互,而是通过一个中介者进行交互。

UML图:

【JAVA设计模式】17.中介者模式

中介者对象:

interface Mediator {
    void operator(Colleague colleague);

}

class ConcreteMediator implements Mediator {
    private Colleague colleague1;
    private Colleague colleague2;

    public void registerColleague1(Colleague cc1) {
        colleague1 = cc1;
    }

    public void registerColleague2(Colleague cc2) {
        colleague2 = cc2;
    }

    @Override
    public void operator(Colleague colleague) {
        if (colleague instanceof ConcreteColleague1) {
            colleague2.getMessage("abc");
        } else if (colleague instanceof ConcreteColleague2) {
            colleague1.getMessage("abc");
        }
    }

}

交互对象接口及其实现类:

interface Colleague {
    void contact();

    void getMessage(String message);
}

class ConcreteColleague1 implements Colleague {
    private Mediator mediator;

    public ConcreteColleague1(Mediator mediator) {
        this.mediator = mediator;
    }

    @Override
    public void getMessage(String message) {
        System.out.println("colleague1 receive " + message);
    }

    @Override
    public void contact() {
        System.out.println("operating ConcreteColleague1");
        mediator.operator(this);
    }
}

客户端调用:

ConcreteMediator mediator = new ConcreteMediator();
Colleague colleague1 = new ConcreteColleague1(mediator);
Colleague colleague2 = new ConcreteColleague2(mediator);
mediator.registerColleague1(colleague1);
mediator.registerColleague2(colleague2);
colleague1.contact();
colleague2.contact();

在中介者类中注册交互对象,之后对交互对象调用交互方法,就会通过中介者访问其他交互对象

JAVA代码:https://github.com/zhuaizhuaixi/design-pattern/tree/master/src/designpattern/behavioral/mediator