中介者模式(Mediator Pattern)又叫作调解者模式或调停者模式。用一个中介对象封装一系列对象交互,中介者使各对象不需要显式地相互作用,从而使其耦合松散,而且可以独立地改变它们之间的交互,属于行为型设计模式。
把网状机构简化成星型结构,通过一个中介类把系统各层次对象间多对多关系变成一对多关系。
通过中介者解耦系统各层次对象的直接耦合,层次对象的对外依赖通信全部交由中介者转发

- 抽象中介者
- 具体中介者
- 抽象同事类
- 具体同事类
一般来说,由于不同的具体同事类一般处理不同的业务,很难抽象出共性,因此在抽象中介者类里直接引用具体同事类,抽象同事类一般可以忽略
框架
JDK中的Timer
优点
- 减少类间依赖,多对多依赖转化为一对多,降低复杂性和耦合性
- 同事类各司其职
缺点
同事类变多,中介类难以维护 ``` public abstract class Colleague {
protected Mediator mediator;
public Colleague(Mediator mediator) {
this.mediator = mediator;
} } public class ConcreteColleagueA extends Colleague { public ConcreteColleagueA(Mediator mediator) {
super(mediator); mediator.setConcreteColleagueA(this);}
public void selfMethodA(){
System.out.println("自发行为A");}
public void depMethodA(){
System.out.println("依赖行为A"); this.mediator.transferA();} } public class ConcreteColleagueB extends Colleague { public ConcreteColleagueB(Mediator mediator) {
super(mediator); mediator.setConcreteColleagueB(this);}
public void selfMethodB(){
System.out.println("自发行为B");}
public void depMethodB(){
System.out.println("依赖行为B"); this.mediator.transferB();} }
public abstract class Mediator {
protected ConcreteColleagueA concreteColleagueA;
protected ConcreteColleagueB concreteColleagueB;
public void setConcreteColleagueA(ConcreteColleagueA concreteColleagueA) {
this.concreteColleagueA = concreteColleagueA;
}
public void setConcreteColleagueB(ConcreteColleagueB concreteColleagueB) {
this.concreteColleagueB = concreteColleagueB;
}
public abstract void transferA();
public abstract void transferB();
} public class ConcreteMediator extends Mediator {
@Override
public void transferA() {
this.concreteColleagueB.selfMethodB();
}
@Override
public void transferB() {
this.concreteColleagueA.selfMethodA();
}
}
```
