中介者模式(Mediator Pattern)又称作调停者模式
,用一个中介对象封装一系列对象交互,中介者使各对象不需要显式地互相作用,从而使其耦合松散,而且可以独立地改变它们之间的交互,属于行为型设计模式。
中介者模式的核心思想是通过中介者解耦系统各层次对象的直接耦合,层次对象的对外依赖通信全部交由中介者转发。
(1)模式的结构
主要角色如下:
优点:
缺点:
代码如下:
public class MediatorPattern {public static void main(String[] args) {Mediator mediator = new ConcreteMediator();ConcreteColleagueA colleagueA = new ConcreteColleagueA(mediator);ConcreteColleagueB colleagueB = new ConcreteColleagueB(mediator);colleagueA.selfMethodA();colleagueA.depMethodA();System.out.println("-------------");colleagueB.depMethodB();}
}// 抽象中介者
abstract class Mediator {protected ConcreteColleagueA colleagueA;protected ConcreteColleagueB colleagueB;public void setColleagueA(ConcreteColleagueA colleagueA) {this.colleagueA = colleagueA;}public void setColleagueB(ConcreteColleagueB colleagueB) {this.colleagueB = colleagueB;}// 中介者业务逻辑public abstract void transferA();public abstract void transferB();
}// 具体中介者
class ConcreteMediator extends Mediator {@Overridepublic void transferA() {// 协调行为:A转发为Bthis.colleagueB.selfMethodB();}@Overridepublic void transferB() {// 协调行为:B转发为Athis.colleagueA.selfMethodA();}
}// 抽象同事类
abstract class Colleague {protected Mediator mediator;public Colleague(Mediator mediator) {this.mediator = mediator;}
}// 具体同事类
class ConcreteColleagueA extends Colleague {public ConcreteColleagueA(Mediator mediator) {super(mediator);this.mediator.setColleagueA(this);}// 自发行为public void selfMethodA() {// 自己逻辑System.out.println(this.getClass().getSimpleName() + " selfMethodA");}// 依赖方法public void depMethodA() {// 自己逻辑System.out.println(this.getClass().getSimpleName() + " depMethodA");// 无法处理的委托给中介者处理this.mediator.transferA();}
}class ConcreteColleagueB extends Colleague {public ConcreteColleagueB(Mediator mediator) {super(mediator);this.mediator.setColleagueB(this);}// 自发行为public void selfMethodB() {// 自己逻辑System.out.println(this.getClass().getSimpleName() + " selfMethodB");}// 依赖方法public void depMethodB() {// 自己逻辑System.out.println(this.getClass().getSimpleName() + " depMethodB");// 无法处理的委托给中介者处理this.mediator.transferB();}
}
– 求知若饥,虚心若愚。