用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显示地相互引用,从而使其耦合松散,而且可以独立地改变它们之间地交互。
类图

实现
1 2 3 4 5
| public abstract class Mediator {
public abstract void send(String message, Colleague colleague);
}
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
| public class ConcreteMediator extends Mediator {
private ConcreteColleague1 c1; private ConcreteColleague2 c2;
public ConcreteColleague1 getC1() { return c1; }
public void setC1(ConcreteColleague1 c1) { this.c1 = c1; }
public ConcreteColleague2 getC2() { return c2; }
public void setC2(ConcreteColleague2 c2) { this.c2 = c2; }
@Override public void send(String message, Colleague colleague) { if (colleague == c1) { c2.receive(message); } else { c1.receive(message); } }
}
|
1 2 3 4 5 6 7 8 9
| public abstract class Colleague {
protected Mediator mediator;
public Colleague(Mediator mediator) { this.mediator = mediator; }
}
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| public class ConcreteColleague1 extends Colleague {
public ConcreteColleague1(Mediator mediator) { super(mediator); }
public void send(String message) { mediator.send(message, this); }
public void receive(String message) { System.out.println("-> Colleague 1: " + message); }
}
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| public class ConcreteColleague2 extends Colleague {
public ConcreteColleague2(Mediator mediator) { super(mediator); }
public void send(String message) { mediator.send(message, this); }
public void receive(String message) { System.out.println("-> Colleague 2: " + message); }
}
|
1 2 3 4 5 6 7 8 9 10 11 12
| public class Client {
public static void main(String[] args) { ConcreteMediator mediator = new ConcreteMediator(); ConcreteColleague1 c1 = new ConcreteColleague1(mediator); ConcreteColleague2 c2 = new ConcreteColleague2(mediator); mediator.setC1(c1); mediator.setC2(c2); c1.send("I'm ConcreteColleague1."); } }
|