中介者模式
中介者模式属于行为型模式,又称调停者模式
定义:用一个中介对象来封装一系列的对象交互,中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互
中介者模式主要用来降低类类之间的耦合
模式类图
角色
- 抽象中介者:
Mediator
- 具体中介者:
ConcreteMediator
- 对象类:
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种设计模式详解