// ********** MediatorDemo.java ********** interface Mediator { public void createColleagues(); public void colleagueChanged(Colleague c); } class ConcreteMediator1 implements Mediator { private ConcreteColleague1 c1; private ConcreteColleague2 c2; public void createColleagues() { c1 = new ConcreteColleague1(this); c2 = new ConcreteColleague2(this); } public void colleagueChanged(Colleague c) { if (c == c1) { int i = c1.get(); c2.operation2(i); } else { int i = c2.get(); c1.operation1(i); } } public void trigger() { c1.set(0); c2.set(0); } } abstract class Colleague { private Mediator mediator; public Colleague(Mediator mediator) { this.mediator = mediator; } public void changed() { mediator.colleagueChanged(this); } } class ConcreteColleague1 extends Colleague { private int i; public ConcreteColleague1(Mediator mediator) { super(mediator); } public void set(int i) { this.i = i; changed(); } public int get() { return i; } public void operation1(int j) {} } class ConcreteColleague2 extends Colleague { private int i; public ConcreteColleague2(Mediator mediator) { super(mediator); } public void set(int i) { this.i = i; changed(); } public int get() { return i; } public void operation2(int j) {} } public class MediatorDemo { private static final int MAX = 1000; public static void main(String args[]) { long t1 = System.currentTimeMillis(); for (int i=0; i<10*MAX; i++) { ConcreteMediator1 mediator = new ConcreteMediator1(); mediator.createColleagues(); for (int j=0; j