public static abstract class Mediator{
protected Colleague1 colleague1;
protected Colleague2 colleague2;
public Colleague1 getColleague1() {
return colleague1;
}
public void setColleague1(Colleague1 colleague1) {
this.colleague1 = colleague1;
}
public Colleague2 getColleague2() {
return colleague2;
}
public void setColleague2(Colleague2 colleague2) {
this.colleague2 = colleague2;
}
public abstract void doSomething();
}
public static class ConcrectMediator extends Mediator{
@Override
public void doSomething() {
//中介者中一般只调用自己的方法
colleague1.doSomethingSelf();
colleague2.doSomethingSelf();
}
}
public static abstract class Colleague{
protected Mediator mediator;
public Colleague(Mediator mediator){
this.mediator = mediator;
}
}
public static class Colleague1 extends Colleague{
public Colleague1(Mediator mediator) {
super(mediator);
}
public void doSomethingSelf(){
System.out.println("c1 doSomethingSelf");
}
public void doSomethingMedia(){
this.mediator.doSomething();
}
}
public static class Colleague2 extends Colleague{
public Colleague2(Mediator mediator) {
super(mediator);
}
public void doSomethingSelf(){
System.out.println("c2 doSomethingSelf");
}
public void doSomethingMedia(){
this.mediator.doSomething();
}
}
public static void main(String[] args){
ConcrectMediator mediator = new ConcrectMediator();
Colleague1 c1 = new Colleague1(mediator);
Colleague2 c2 = new Colleague2(mediator);
mediator.setColleague1(c1);
mediator.setColleague2(c2);
c1.doSomethingSelf();
c1.doSomethingMedia();
c2.doSomethingSelf();
c2.doSomethingMedia();
}
优点:
减少类的依赖,把一对多的依赖变成一对一,降低了类的耦合。
缺点:
中介者会很复杂。
使用场景:
看多个对象的耦合程度:在类图中出现了蜘蛛网的结构,考虑使用中介者模式来优化类图。