中介模式(Mediator)也称调停者模式,是一种比较简单的模式。
定义:
用一个中介对象封装一系列对象(同事)的交互,中介者使各对象不需要显示地相互作用,从而使其耦合松散,而且独立地改变它们之间的交互。
抽象中介者类图如下:
中介者模式有以下4个角色:
Mediator.java
public abstract class Mediator { // 定义同事类 protected ConcreteColleague1 c1; protected ConcreteColleague2 c2; // 通过getter/setter方法注入同事类 protected ConcreteColleague1 getC1() { return c1; } protected void setC1(ConcreteColleague1 c1) { this.c1 = c1; } protected ConcreteColleague2 getC2() { return c2; } protected void setC2(ConcreteColleague2 c2) { this.c2 = c2; } // 中介者的业务逻辑 public abstract void doSomething1(); public abstract void doSomething2();}
ConcreteMediator.java
public class ConcreteMediator extends Mediator { @Override public void doSomething1() { // 调用同事类的方法,只要是public方法都可以调用 super.c1.selfMethod1(); super.c2.selfMethod2(); } @Override public void doSomething2() { super.c1.selfMethod1(); super.c2.selfMethod2(); }}
Colleague.java
public abstract class Colleague { protected Mediator mediator; public Colleague(Mediator mediator) { this.mediator = mediator; }}
ConcreteColleague1.java
public class ConcreteColleague1 extends Colleague { // 通过构造函数传递中介者 public ConcreteColleague1(Mediator mediator) { super(mediator); } // 自有方法 self-method public void selfMethod1() { } // 依赖方法 dep-method public void depMethod1() { // 处理自己的业务逻辑 // 自己不能处理的业务逻辑,委托给中介者处理 super.mediator.doSomething1(); }}
ConcreteColleague2.java
public class ConcreteColleague2 extends Colleague { public ConcreteColleague2(Mediator mediator) { super(mediator); } // 自有方法 self-method public void selfMethod2() { } // 依赖方法 dep-method public void depMethod2() { // 处理自己的业务逻辑 // 自己不能处理的业务逻辑,委托给中介者处理 super.mediator.doSomething2(); }}
优点:
缺点:
注意事项:
引用:
青岛东合信息技术有限公司 . 设计模式(Java版) . 电子工业出版社,2012,142-146.
秦小波 . 设计模式之禅 . 机械工业出版社, 2014 , 254-256
联系客服