用一个中介对象来封装一系列的对象交互。中介者使得各对象不需要显示地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。
public interface Mediator {
public void changed(Colleague colleague);
}
public abstract class Colleague {
private Mediator mediator;
public Colleague(Mediator mediator) {
this.mediator = mediator;
}
public Mediator getMediator() {
return mediator;
}
}
public class ConcreteColleagueA extends Colleague {
public ConcreteColleagueA(Mediator mediator) {
super(mediator);
}
public void someOperation() {
getMediator.changed(this);
}
}
public class ConcreteColleagueB extends Colleague {
public ConcreteColleagueB(Mediator mediator) {
super(mediator);
}
public void someOperation() {
getMediator.changed(this);
}
}
public class ConcreteMediator implements Mediator {
private ConcreteColleagueA colleagueA;
private ConcreteColleagueB colleagueB;
public void setConcreteColleagueA(ConcreteColleagueA colleagueA) {
this.colleagueA = colleagueA;
}
public void setConcreteColleagueB(ConcreteColleagueB colleagueB) {
this.colleagueB = colleagueB;
}
public void changed(Colleague colleague) {
}
}
要使用中介者模式来实现,就要区分出同事对象和中介者对象。主板是作为中介者,而光驱、CPU、声卡、显卡等配件,都是作为同事对象。
同事关系:在标准的中介者模式中,将使用中介者对象来交互的那些对象称为同事类。
同事和中介者的关系:在中介者模式中,当一个同事对象发生了改变,需要主动通知中介者,让中介者去处理与其他同事对象相关的交互。
优点:多对多变一对多
public interface Mediator {
public void changed(Colleague colleague);
}
public abstract class Colleague {
private Mediator mediator;
public Colleague(Mediator mediator) {
this.mediator = mediator;
}
public Mediator getMediator() {
return mediator;
}
}
public class ConcreteColleagueA extends Colleague {
public ConcreteColleagueA(Mediator mediator) {
super(mediator);
}
public void someOperation() {
getMediator.changed(this);
}
}
public class ConcreteColleagueB extends Colleague {
public ConcreteColleagueB(Mediator mediator) {
super(mediator);
}
public void someOperation() {
getMediator.changed(this);
}
}
public class ConcreteMediator implements Mediator {
private ConcreteColleagueA colleagueA;
private ConcreteColleagueB colleagueB;
public void setConcreteColleagueA(ConcreteColleagueA colleagueA) {
this.colleagueA = colleagueA;
}
public void setConcreteColleagueB(ConcreteColleagueB colleagueB) {
this.colleagueB = colleagueB;
}
public void changed(Colleague colleague) {
}
}
要使用中介者模式来实现,就要区分出同事对象和中介者对象。主板是作为中介者,而光驱、CPU、声卡、显卡等配件,都是作为同事对象。
同事关系:在标准的中介者模式中,将使用中介者对象来交互的那些对象称为同事类。
同事和中介者的关系:在中介者模式中,当一个同事对象发生了改变,需要主动通知中介者,让中介者去处理与其他同事对象相关的交互。
优点:多对多变一对多