Java大数据平台开发 学习笔记(50)—— java设计模式(中介者模式)知识汇总

it2026-08-22  4

一、前言:

中介者模式的注意事项和细节:

使用中介者模式可以将网状结构分离成星型结构。减少类的依赖,降低偶合,遵循了迪米特法则。

二、中介者模式:

2.1、UML 图:

2.2、代码实例:

Step 1) 创建 Colleague 抽象类:

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); }

Step 2) 创建 Alarm 实现类:

public class Alarm extends Colleague{ public Alarm(Mediator mediator, String name) { super(mediator, name); mediator.Register(name, this); } public void SendAlarm(int stateChange){ SendMessage(stateChange); } @Override public void SendMessage(int stateChange) { this.GetMediator().GetMassage(stateChange, this.name); } }

Step 3) 创建 CoffeeMachine 抽象类:

public class CoffeeMachine extends Colleague{ public CoffeeMachine(Mediator mediator, String name) { super(mediator, name); } @Override public void SendMessage(int stateChange) { } 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); } }

Step 4) 创建 Curtains 实现类:

public class Curtains extends Colleague{ public Curtains(Mediator mediator, String name) { super(mediator, name); mediator.Register(name, this); } @Override public void SendMessage(int stateChange) { this.GetMediator().GetMassage(stateChange, this.name); } public void UpCurtains(){ System.out.println("I am holding Up Curtains ! "); } }

Step 5) 创建 TV 实现类:

public class TV extends Colleague{ public TV(Mediator mediator, String name) { super(mediator, name); mediator.Register(name, this); } @Override public void SendMessage(int stateChange) { this.GetMediator().GetMassage(stateChange, this.name); } public void StartTv(){ System.out.println("It`s time to StartTv ! "); } public void StopTv(){ System.out.println("It`s time to StopTv ! "); } }

Step 6) 创建 Mediator 抽象类:

public abstract class Mediator { public abstract void Register(String colleagueName, Colleague colleague); public abstract void GetMassage(int stateChange, String colleagueName); public abstract void SendMessage(); }

Step 7) 创建 ConcreteMediator 抽象类:

public class ConcreteMediator extends Mediator{ private HashMap<String, Colleague> colleagueMap; private HashMap<String, String> interMap; public ConcreteMediator(){ colleagueMap = new HashMap<String, Colleague>(); interMap = new HashMap<String, String>(); } @Override public void Register(String colleagueName, Colleague colleague) { colleagueMap.put(colleagueName, colleague); if(colleague instanceof Alarm){ interMap.put("Alarm", colleagueName); interMap.put("CpffeeMachine", colleagueName); }else if(colleague instanceof TV){ interMap.put("TV", colleagueName); }else if(colleague instanceof Curtains){ interMap.put("Curtains", colleagueName); } } @Override public void GetMassage(int stateChange, String colleagueName) { if(colleagueMap.get(colleagueName) instanceof Alarm){ if(stateChange == 0){ ((CoffeeMachine) (colleagueMap .get(interMap .get("colleagueName")))) .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){ }else if(colleagueMap.get(colleagueName) instanceof Curtains){ } } @Override public void SendMessage() { } }

Step 8) 创建 main 方法:

public class ClientTest { public static void main(String[] args) { Mediator mediator = new ConcreteMediator(); Alarm alarm = new Alarm(mediator, "alarm"); CoffeeMachine coffeeMechine = new CoffeeMachine(mediator, "coffeeMachine"); Curtains curtains = new Curtains(mediator, "curtains"); TV tv = new TV(mediator, "TV"); alarm.SendAlarm(0); coffeeMechine.finishCoffee(); alarm.SendAlarm(1); } }

• 由 ChiKong_Tam 写于 2020 年 10 月 22 日

最新回复(0)