Java中的中介器设计模式
在本教程中,我们将学习一种行为模式,该行为模式将促进彼此通信的多个对象之间的松散耦合。 Mediator设计模式背后的想法是拥有一个中心对象,该对象封装了一组对象之间的交互方式。
在调解器模式中,我们在称为调解器的单独类中提取不同类之间的所有关系。 这使我们能够在不影响整个系统的情况下对一个组件进行更改。
因此,我们拥有一个松散耦合的系统,它更易于扩展和维护。
UML表示形式:
我们可以借助以下UML图来表示调解器模式:
在这里,我们有:
- 介体:定义同事之间进行交流的契约的接口或抽象类
- ConcreteMediator:实现调解员合同的类; 它了解所有同事及其相互交流。 同事之间的任何交流都只能通过调解员进行
- 同事:代表我们系统组件的接口或抽象类
- ConcreteColleague:实现Colleague界面并愿意彼此交互的类
实施中介者模式:
让我们以一个航空交通控制系统为例。
每个航班都需要知道其着陆的可用跑道。 如果我们允许飞机之间相互通信以找到可用的跑道,则会导致混乱。 而是,有一个飞机交通控制室是一个好主意,它可以跟踪所有可用的跑道并将其分配给飞机。
让我们从定义AircraftMediator和AircraftTrafficControlRoom开始:
public interface AircraftMediator {public void registerRunway(Runway runway);public String allotRunwayTo(Aircraft aircraft); public void releaseRunwayOccupiedBy(Aircraft aircraft);
}public class AicraftTrafficControlRoom implements AircraftMediator {private LinkedList<Runway> availableRunways = new LinkedList<>(); private Map<Aircraft, Runway> aircraftRunwayMap = new HashMap<>();@Overridepublic void registerRunway(Runway runway) {this.availableRunways.add(runway);}@Overridepublic String allotRunwayTo(Aircraft aircraft) {Runway nextAvailbleRunway = null;if(!this.availableRunways.isEmpty()) {nextAvailbleRunway = this.availableRunways.removeFirst();this.aircraftRunwayMap.put(aircraft, runway);}return nextAvailbleRunway == null ? null : nextAvailbleRunway.getName();}@Overridepublic void releaseRunwayOccupiedBy(Aircraft aircraft) {if(this.aircraftRunwayMap.containsKey(aircraft)) {Runway runway = this.aircraftRunwayMap.remove(aircraft);this.availableRunways.add(runway); }}
}
空中交通管制室充当调解员,并跟踪所有可用跑道。 它负责分配和释放跑道。
定义同事:
现在,让我们定义我们的飞机,其实例将是同事:
public interface AircraftColleague {void startLanding();void finishLanding();
}public class Aircraft implements AircraftColleague {private AircraftMediator mediator;private String flightName;public Aircraft(AircraftMediator mediator, String flightName) {this.mediator = mediator;this.flightName = flightName;}@Overridepublic void startLanding() {String runway = this.mediator.allotRunwayTo(this);if(runway == null) {//informing passengersSystem.out.println("Due to traffic, there's a delay in landing of " + this.flightName ); } else {System.out.println("Currently landing " + this.flightName + " on " + runway); } }@Overridepublic void finishLanding() {System.out.println(this.flightName + "landed successfully");this.mediator.releaseRunwayOccupiedBy(this);}
}
测试我们的实施:
让我们看看它们如何一起工作:
// In our main method
Runway runwayA = new Runway("Runway A");AircraftMediator mediator = new AircraftTrafficControlRoom();
mediator.registerRunway(runwayA);AircraftColleague wrightFlight = new Aircraft(mediator, "Wright Flight");
AircraftColleague airbusA380 = new Aircraft(mediator, "Airbus A380"); wrightFlight.startLanding();
airbusA380.startLanding();
wrightFlight.finishLanding();
执行上述代码后,我们将得到以下输出:
Currently landing Wright Flight on Runway A
Due to traffic, there's a delay in landing of Airbus A380
Wright Flight landed successfully
如果我们再次尝试降落空中客车,则可以在跑道可用的情况下继续进行降落。
结论:
在本教程中,我们学习了如何实现中介模式。 当我们具有多个对象相互通信的系统时,将使用中介模式。 这种模式促进了松散的耦合,从而使系统更加灵活。
这种模式的常见应用是聊天或消息传递系统。 此外, Java Concurrency Executor的execute()方法利用了这种模式。
翻译自: https://www.javacodegeeks.com/2019/09/mediator-design-pattern-java.html
Java中的中介器设计模式相关推荐
- Java中的中介器设计模式-示例教程
中介者模式是行为设计模式之一 ,因此它处理对象的行为. 中介器设计模式用于在系统中不同对象之间提供集中式通信介质. 根据GoF,中介者模式意图是: 通过封装不同对象集相互交互和通信的方式,允许松散耦合 ...
- java 设计模式 示例_Java中的中介器设计模式-示例教程
java 设计模式 示例 中介者模式是行为设计模式之一 ,因此它处理对象的行为. 中介器设计模式用于在系统中不同对象之间提供集中式通信介质. 根据GoF,中介者模式意图是: 通过封装不同对象集相互交互 ...
- Java中的装饰器设计模式
装饰器设计模式允许在运行时将附加职责或行为动态附加到对象. 它是一种结构模式,利用聚合来组合这些行为. 在本教程中,我们将学习实现装饰器模式. UML图: 让我们从装饰器模式的UML表示开始: Con ...
- java设计模式中不属于创建型模式_23种设计模式第二篇:java工厂模式定义:工厂模式是 Java 中最常用的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式...
23种设计模式第二篇:java工厂模式 定义: 工厂模式是 Java 中最常用的设计模式之一.这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式. 工厂模式主要是为创建对象提供过渡接口, ...
- 笔记:Java中的单例设计模式
之前接触过单例模式,当初不明白这样的设计用意,今天特地研究了下java中的单例设计模式的用处及用法. 单例模式:单例模式是一种常用的软件设计模式.在它的核心结构中只包含一个被称为单例类的特殊类.一个类 ...
- java中的垃圾收集器_Java中的垃圾收集
java中的垃圾收集器 Garbage collection in java is one of the advance topic. Java GC knowledge helps us in fi ...
- java设计模式之装饰模式_Java中的装饰器设计模式
java设计模式之装饰模式 装饰器设计模式允许在运行时将附加职责或行为动态附加到对象. 它是一种结构模式,利用聚合来组合这些行为. 在本教程中,我们将学习实现装饰器模式. UML图: 让我们从装饰器模 ...
- java 设计模式 示例_Java示例中的装饰器设计模式
java 设计模式 示例 Decorator design pattern is used to modify the functionality of an object at runtime. A ...
- Java中的静态代理设计模式
AOP(Aspect Oriented Programmimg) 面向切面编程 核心:spring中的代理设计模式 1.静态代理设计模式 service 核心: 核心功能:一定要有的功能,没有的话业务 ...
最新文章
- boost::weak_from_raw相关的测试程序
- js-比较两个日期的大小
- php imagemagick 漏洞,ImageMagick漏洞(CVE-2016-3714)修复方案
- parallelstream启动的线程数_高并发与多线程网络学习笔记(三)线程组和线程池
- 网上的很多Android项目源码有用吗?Android开发注意的地方。
- Java-ReentrantLock-NonfairSync/FairSync
- Linux进程地址空间和虚拟内存
- Markdown箭头总汇
- windows7副本不是正版问题
- python MySQLdb 一个连接connection多个cursor
- 超赞~免费生成国庆风格微信头像API接口
- 互联网赚钱的逻辑是什么?
- 小米air2se耳机只有一边有声音怎么办_小米无线蓝牙耳机Air2 SE——性价比背后的妥协之作...
- 微信公众号开发:如何获取openId(最简单的方式)
- 【数学建模】灰色预测法
- PT100温度电阻转换器
- 信号、signal 函数、sigaction 函数
- python教程40G,从入门到精通免费领取
- 【C】编写一个函数,由实参传来一个字符串,统计此字符串中字母、数字、空格和其他字符的个数,在主函数中输入字符串以及输出上述的结果。
- Weex 300行代码开发一款简易的跑步App
热门文章
- AliOS Things v1.2.0新特性
- apache+jk+tomcat集群+session同步
- Web中的XHRHttpRequest
- nfs服务端服务停掉,导致的客户端访问挂载目录卡死的情况
- Xmodem恢复交换机IOS
- Cannot change version of project facet Dynamic Web Module to 2.5 问题的解决方法
- golang 传值 传引用 简介
- 性能监控工具 NewRelic 简介
- golang 发送get和post示例
- 网络连接错误 failed to handler mux client connection