情节:世界需要和平!
定义:用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。
一般应用于一组对象以定义良好但是复杂的方式进行通讯的场合,以及想定制一个分布在多个类中的行为,而又不想生成太多的子类的场合。
结构图:
public abstract class Mediator {
public abstract void Send(String message, Colleague colleague);
}
public abstract class Colleague {
protected Mediator mediator;
public Colleague(Mediator mediator) {
this.mediator = mediator;
}
}
public class ConcreteColleague1 extends Colleague{
public ConcreteColleague1(Mediator mediator) {
super(mediator);
}
public void Send(String message){
mediator.Send(message, this);
}
public void Notify(String message){
System.out.println("同事1"+message);
}
}
public class ConcreteColleague2 extends Colleague{
public ConcreteColleague2(Mediator mediator) {
super(mediator);
}
public void Send(String message){
mediator.Send(message, this);
}
public void Notify(String message){
System.out.println("同事2"+message);
}
}
public class ConcreteMediator extends Mediator{
private ConcreteColleague1 colleague1;
private ConcreteColleague2 colleague2;
public ConcreteColleague1 getColleague1() {
return colleague1;
}
public void setColleague1(ConcreteColleague1 colleague1) {
this.colleague1 = colleague1;
}
public ConcreteColleague2 getColleague2() {
return colleague2;
}
public void setColleague2(ConcreteColleague2 colleague2) {
this.colleague2 = colleague2;
}
@Override
public void Send(String message, Colleague colleague) {
if (colleague == colleague1) {
colleague2.Notify(message);
}else {
colleague1.Notify(message);
}
}
}
public class Client {
public static void main(String[] args) {
ConcreteMediator cm = new ConcreteMediator();
ConcreteColleague1 c1 = new ConcreteColleague1(cm);
ConcreteColleague2 c2 = new ConcreteColleague2(cm);
cm.setColleague1(c1);
cm.setColleague2(c2);
c1.Send("吃饭了吗");
c2.Send("没有");
}
}