1.中介者模式定义
用一个中介对象来封装一系列的对象交互。中介者使得各对象不需要显式的相互调用,从而使其耦合松散,而且可以独立的改变他们之间的交互
2.中介者模式UML图
Mediater:中介者接口。在里面定义各个同事之间相互调用的方法,可以是公共的相互之间的通信,也可以是小范围之间的相互调用
ConcreteMediator:中介者接口的具体实现,它需要了解并维护各个同事对象,并负责具体的各个同事之间的相互调用
Colleague:同事的抽象类 或者是接口。
ConcreteColleague:具体的同事类,是现在自己的业务,在需要与其他同事之间通信的时候就持有中介者对象,中介者负责与其他同事进行交互
3.代码实现
public abstract class Colleague{
private Mediator mediator;
public Colleague(Mediator mediator){
this.mediator=mediator;
}
public Mediator getMediator(){
return this.metiator;
}
}
public class ConcreteColleagueA extends Colleague{
public ConcreteColleagueA(Mediator mediator){
super(mediator);
}
public void someOperation(){
this.getMediator().changed(this);
}
}
public class ConcreteColleagueB extends Colleague{
public ConcreteColleagueB(Mediator mediator){
super(mediator);
}
public void someOperation(){
this.getMediator().changed(this);
}
}
public interface Mediator{
public void changed(Colleague colleague);
}
public class ConcreteMediator implements Mediator{
private ConcreteColleagueA colleagueA;
private ConcreteColleagueB colleagueB;
public void setConcreteColleagueA(ConcreteColleagueA colleagueA){
this.colleagueA=colleagueA;
}
public void setConcreteColleagueB(ConcreteColleagueA colleagueB){
this.colleagueB=colleagueB;
}
public void changed(Colleague colleague){
//某个同事发生变化,通常需要与其他同事交互
//具体协调相应同事对象来实现协作行为
}
}
4.中介者模式的本质:封装交互