中介者模式

中介者模式属于行为型模式,又称调停者模式

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

中介者模式主要用来降低类类之间的耦合

模式类图

角色

  1. 抽象中介者:Mediator
  2. 具体中介者:ConcreteMediator
  3. 对象类:Colleague中介者持有该类实例

优点

减少类之间的耦合,对象类只依赖中介者类,将原本可能会出现的一对多的依赖,变成一对一的依赖,降低类之间的耦合

缺点

中介者类膨胀,对象类越多,中介者类处理的依赖就越多,中介者类越膨胀,处理逻辑越复杂

模式代码实现

源码地址:https://github.com/mingyuHub/design-patterns

抽象中介者
/**
 * @author: chenmingyu
 * @date: 2019/3/31 13:46
 * @description: 抽象中介者
 */
public interface Mediatorable {

    /**
     * 创建中介者
     */
    void createMediator();

    /**
     * 打游戏
     */
    void playGame();
}
具体中介者

持有对象类依赖

/**
 * @author: chenmingyu
 * @date: 2019/3/31 13:47
 * @description: 具体中介者
 */
public class ConcreteMediator implements Mediatorable {

    /**
     * 对象类1
     */
    private Colleague1 colleague1;
    /**
     * 对象类2
     */
    private Colleague2 colleague2;

    @Override
    public void createMediator() {
        colleague1 = new Colleague1(this);
        colleague2 = new Colleague2(this);
    }

    @Override
    public void playGame() {
        colleague1.playGame();
        colleague2.playGame();
    }
}
对象抽象类

依赖中介者类

/**
 * @author: chenmingyu
 * @date: 2019/3/31 13:51
 * @description: 抽象对象类
 */
public abstract class Colleague {

    /**
     * 依赖中介者类
     */
    protected Mediatorable mediatorable;

    public Colleague(Mediatorable mediatorable) {
        this.mediatorable = mediatorable;
    }

    /**
     * 玩游戏
     */
    public abstract void playGame();
}
具体对象类

对象类1

/**
 * @author: chenmingyu
 * @date: 2019/3/31 13:54
 * @description: 对象类1
 */
public class Colleague1 extends Colleague {

    public Colleague1(Mediatorable mediatorable) {
        super(mediatorable);
    }

    @Override
    public void playGame() {
        System.out.println("Colleague1 玩游戏");
    }
}

对象类2

/**
 * @author: chenmingyu
 * @date: 2019/3/31 13:56
 * @description:
 */
public class Colleague2 extends Colleague {

    public Colleague2(Mediatorable mediatorable) {
        super(mediatorable);
    }

    @Override
    public void playGame() {
        System.out.println("Colleague2 玩游戏");
    }
}
验证
public static void main(String[] args) {
    Mediatorable mediatorable = new ConcreteMediator();
    mediatorable.createMediator();
    mediatorable.playGame();
}

输出

Colleague1 玩游戏
Colleague2 玩游戏

参考:设计模式之禅:https://www.kancloud.cn/sstd521/design/193551

推荐阅读:23种设计模式详解