1. 意图(Intent)
2. 类图(Class Diagram)

Alarm(闹钟)、CoffeePot(咖啡壶)、Calendar(日历)、Sprinkler(喷头)是一组相关的对象,在某个对象的事件产生时需要去操作其它对象,形成了下面这种依赖结构:
使用中介者模式可以将复杂的依赖结构变成星形结构:
抽象的相关对象类 [ Colleague ]
public abstract class Colleague {public abstract void onEvent(Mediator mediator);}
[ ConcreteColleague ]
具体的相关对象警报实现类
public class Alarm extends Colleague {@Overridepublic void onEvent(Mediator mediator) {mediator.doEvent("alarm");}public void doAlarm() {System.out.println("doAlarm()");}}
具体的相关对象咖啡壶实现类
public class CoffeePot extends Colleague {@Overridepublic void onEvent(Mediator mediator) {mediator.doEvent("coffeePot");}public void doCoffeePot() {System.out.println("doCoffeePot()");}}
具体的相关对象日历表实现类
public class Calender extends Colleague {@Overridepublic void onEvent(Mediator mediator) {mediator.doEvent("calender");}public void doCalender() {System.out.println("doCalender()");}}
具体的相关对象洒水壶实现类
public class Sprinkler extends Colleague {@Overridepublic void onEvent(Mediator mediator) {mediator.doEvent("sprinkler");}public void doSprinkler() {System.out.println("doSprinkler()");}}
抽象的中介者类 [ Mediator ]
public abstract class Mediator {public abstract void doEvent(String eventType);}
具体的中介者实现类 [ ConcreteMediator ]
public class ConcreteMediator extends Mediator {private Alarm alarm;private CoffeePot coffeePot;private Calender calender;private Sprinkler sprinkler;public ConcreteMediator(Alarm alarm, CoffeePot coffeePot, Calender calender, Sprinkler sprinkler) {this.alarm = alarm;this.coffeePot = coffeePot;this.calender = calender;this.sprinkler = sprinkler;}@Overridepublic void doEvent(String eventType) {switch (eventType) {case "alarm":doAlarmEvent();break;case "coffeePot":doCoffeePotEvent();break;case "calender":doCalenderEvent();break;default:doSprinklerEvent();}}public void doAlarmEvent() {alarm.doAlarm();coffeePot.doCoffeePot();calender.doCalender();sprinkler.doSprinkler();}public void doCoffeePotEvent() {// ...}public void doCalenderEvent() {// ...}public void doSprinklerEvent() {// ...}}
客户端演示代码:
public class Client {
public static void main(String[] args) {
Alarm alarm = new Alarm();
CoffeePot coffeePot = new CoffeePot();
Calender calender = new Calender();
Sprinkler sprinkler = new Sprinkler();
Mediator mediator = new ConcreteMediator(alarm, coffeePot, calender, sprinkler);
// 闹钟事件到达,调用中介者就可以操作相关对象
alarm.onEvent(mediator);
}
}
// 输出:
// doAlarm()
// doCoffeePot()
// doCalender()
// doSprinkler()
4. JDK
- All scheduleXXX() methods of java.util.Timer(opens new window)
- java.util.concurrent.Executor#execute()(opens new window)
- submit() and invokeXXX() methods of java.util.concurrent.ExecutorService(opens new window)
- scheduleXXX() methods of java.util.concurrent.ScheduledExecutorService(opens new window)
- java.lang.reflect.Method#invoke()
