目录

对原理类图的说明-即(中介者模式的角色及职麦)

中介者
- public abstract class Mediator {
- //将给中介者对象,加入到集合中
- public abstract void Register(String colleagueName, Colleague colleague);
- //接收消息, 具体的同事对象发出
- public abstract void GetMessage(int stateChange, String colleagueName);
-
- public abstract void SendMessage();
- }
-
-
-
- //具体的中介者类
- public class ConcreteMediator extends Mediator {
- //集合,放入所有的同事对象
- private HashMap
colleagueMap; - private HashMap
interMap; -
- public ConcreteMediator() {
- colleagueMap = new HashMap
(); - interMap = new HashMap
(); - }
-
- @Override
- public void Register(String colleagueName, Colleague colleague) {
-
- colleagueMap.put(colleagueName, colleague);
-
- if (colleague instanceof Alarm) {
- interMap.put("Alarm", colleagueName);
- } else if (colleague instanceof CoffeeMachine) {
- interMap.put("CoffeeMachine", colleagueName);
- } else if (colleague instanceof TV) {
- interMap.put("TV", colleagueName);
- } else if (colleague instanceof Curtains) {
- interMap.put("Curtains", colleagueName);
- }
- }
-
- //具体中介者的核心方法
- //1. 根据得到消息,完成对应任务
- //2. 中介者在这个方法,协调各个具体的同事对象,完成任务
- @Override
- public void GetMessage(int stateChange, String colleagueName) {
- //处理闹钟发出的消息
- if (colleagueMap.get(colleagueName) instanceof Alarm) {
- if (stateChange == 0) {
- ((CoffeeMachine) (colleagueMap.get(interMap
- .get("CoffeeMachine")))).StartCoffee();
- ((TV) (colleagueMap.get(interMap.get("TV")))).StartTv();
- } else if (stateChange == 1) {
- ((TV) (colleagueMap.get(interMap.get("TV")))).StopTv();
- }
-
- } else if (colleagueMap.get(colleagueName) instanceof CoffeeMachine) {
- ((Curtains) (colleagueMap.get(interMap.get("Curtains"))))
- .UpCurtains();
-
- } else if (colleagueMap.get(colleagueName) instanceof TV) {//如果TV发现消息
-
- } else if (colleagueMap.get(colleagueName) instanceof Curtains) {
- //如果是以窗帘发出的消息,这里处理...
- }
-
- }
-
- @Override
- public void SendMessage() {
-
- }
-
- }
同事类
- //同事抽象类
- public abstract class Colleague {
- private Mediator mediator;
- public String name;
-
- public Colleague(Mediator mediator, String name) {
-
- this.mediator = mediator;
- this.name = name;
-
- }
-
- public Mediator GetMediator() {
- return this.mediator;
- }
-
- public abstract void SendMessage(int stateChange);
- }
- //具体的同事类
- public class Alarm extends Colleague {
-
- //构造器
- public Alarm(Mediator mediator, String name) {
- super(mediator, name);
- //在创建Alarm 同事对象时,将自己放入到ConcreteMediator 对象中[集合]
- mediator.Register(name, this);
- }
-
- public void SendAlarm(int stateChange) {
- SendMessage(stateChange);
- }
-
- @Override
- public void SendMessage(int stateChange) {
- //调用的中介者对象的getMessage
- this.GetMediator().GetMessage(stateChange, this.name);
- }
-
- }
-
-
-
- public class CoffeeMachine extends Colleague {
-
- public CoffeeMachine(Mediator mediator, String name) {
- super(mediator, name);
- mediator.Register(name, this);
- }
-
- @Override
- public void SendMessage(int stateChange) {
- this.GetMediator().GetMessage(stateChange, this.name);
- }
-
- public void StartCoffee() {
- System.out.println("It's time to startcoffee!");
- }
-
- public void FinishCoffee() {
- System.out.println("After 5 minutes!");
- System.out.println("Coffee is ok!");
- SendMessage(0);
- }
- }
-
- ......其他类似