Java 杂谈架构算法设计模式和编程理论

对象间网状依赖的解耦——中介者模式

2019-05-14  本文已影响4人  RunAlgorithm

1. 定义

中介者模式(Mediator Pattern):用一个中介对象(中介者)来封装一系列的对象交互,中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。中介者模式又称为调停者模式,它是一种对象行为型模式。

针对依赖关系复杂的对象的引用关系做了一次调整,把对象间的依赖抽象出一个中介者来统一处理。

整个模型由复杂的网状依赖简化为星型依赖。

中介者模式

2. 设计

中介者的主要角色有:

整体类图如下:

中介者模式-类图

这里举一个简单的模型。

抽象中介者,集合所有同事类需要依赖其他同事执行的方法。

public interface Mediator {

    void helloAB();

    void helloBC();

    void helloAC();
}

具体中介者,引用所有的对象,并且在方法中处理依赖关系的调用。

public class ConcreteMediator implements Mediator {

    private ColleagueA colleagueA;
    private ColleagueB colleagueB;
    private ColleagueC colleagueC;

    public ConcreteMediator() {

    }

    public void addColleague(ColleagueA colleagueA) {
        this.colleagueA = colleagueA;
    }

    public void addColleague(ColleagueB colleagueB) {
        this.colleagueB = colleagueB;
    }

    public void addColleague(ColleagueC colleagueC) {
        this.colleagueC = colleagueC;
    }

    public void helloAB() {
        colleagueA.helloA();
        colleagueB.helloB();
    }

    public void helloBC() {
        colleagueB.helloB();
        colleagueC.helloC();
    }

    public void helloAC() {
        colleagueA.helloA();
        colleagueC.helloC();
    }
}

抽象同事类,引用中介者,暴露接口给实现的同事类使用。

public class Colleague {

    private Mediator mediator;

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

    protected Mediator getMediator() {
        return mediator;
    }
}

具体同事类,实现业务逻辑,涉及到对其他同事的调用,使用中介者来完成。

比如这里的同事 A。

public class ColleagueA extends Colleague {

    public ColleagueA(Mediator mediator) {
        super(mediator);
    }

    public void hello() {
        System.out.println("A 执行");
        helloA();
        getMediator().helloBC();
        System.out.println();
    }

    public void helloA() {
        System.out.println("hello A.");
    }
}

使用的方式:

public class TestMediator {

    public static void main(String[] args) {

        // 创建中介者
        ConcreteMediator mediator = new ConcreteMediator();

        // 创建同事
        ColleagueA colleagueA = new ColleagueA(mediator);
        ColleagueB colleagueB = new ColleagueB(mediator);
        ColleagueC colleagueC = new ColleagueC(mediator);

        // 注入依赖
        mediator.addColleague(colleagueA);
        mediator.addColleague(colleagueB);
        mediator.addColleague(colleagueC);

        // 执行方法
        colleagueA.hello();
        colleagueB.hello();
        colleagueC.hello();
    }
}

3. 应用

中介者主要的职责:

应用场景:

4. 特点

4.1. 优势

4.2. 缺点

上一篇 下一篇

猜你喜欢

热点阅读