中介模式(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
如对本文有疑问, 点击进行留言回复!!
【面试题】研究过tomcat的NioEndpoint源码吗?请阐述下Reactor多线程模型在tomcat中的实现。
荐 厉害了!阿里P8架构师用4大技术文档带你深入解读爆火的中台战略
网友评论