描述
中介者模式(Mediator Pattern):用一个中介对象来封装一系列的对象交互,中介者使各对象不需要显式地相互引用,减少对象间混乱的依赖关系,从而使其耦合松散,而且可以独立地改变它们之间的交互。对象行为型模式。
主要角色
- Mediator: 抽象中介者
- ConcreteMediator: 具体中介者
- Colleague: 抽象同事类
- ConcreteColleague: 具体同事类
代码实现
public abstract class AbstractCaptain {public Tower tower;public void setTower(Tower tower) {this.tower = tower;}abstract void takeOff();abstract void landing();}
public class SC888 extends AbstractCaptain{@Overridevoid takeOff() {System.out.println("SC888起飞");tower.isDepartures("qf");}@Overridevoid landing() {System.out.println("SC888降落");tower.isDepartures("jl");}}
public class WU777 extends AbstractCaptain{@Overridevoid takeOff() {System.out.println("WU777起飞");tower.isDepartures("qf");}@Overridevoid landing() {System.out.println("WU777降落");tower.isDepartures("jl");}}
public class Tower {//跑道是否可以起飞public boolean track = true;public void isDepartures(String status){if("qf".equals(status)){if(track){System.out.println("起飞成功");track=false;}else {System.out.println("起飞失败");}}if("jl".equals(status)){if(track){System.out.println("降落成功");track=false;}else {System.out.println("降落失败");}}}}
public class IntermediaryTest {public static void main(String[] args) {SC888 sc888 = new SC888();WU777 wu777 = new WU777();Tower tower = new Tower();sc888.setTower(tower);wu777.setTower(tower);sc888.takeOff();wu777.takeOff();}}//测试SC888起飞起飞成功WU777起飞起飞失败
使用场景
什么场景用到?
- SpringMVC 的 DispatcherServlet是一个中介者,他会提取Controller、Model、View来进行调用。而无需controller直接调用view之类的渲染方法
- 分布式系统中的网关
- 迪米特法则的一个典型应用
- 中介者和外观(门面)模式区别?
- 中介者双向操作,门面偏向于封装某一方 …….
