Java中的中介器设计模式

在本教程中,我们将学习一种行为模式,该行为模式将促进彼此通信的多个对象之间的松散耦合。 Mediator设计模式背后的想法是拥有一个中心对象,该对象封装了一组对象之间的交互方式。

在调解器模式中,我们在称为调解器的单独类中提取不同类之间的所有关系。 这使我们能够在不影响整个系统的情况下对一个组件进行更改。

因此,我们拥有一个松散耦合的系统,它更易于扩展和维护。

UML表示形式:

我们可以借助以下UML图来表示调解器模式:

在这里,我们有:

  • 介体:定义同事之间进行交流的契约的接口或抽象
  • ConcreteMediator:实现调解员合同的类; 它了解所有同事及其相互交流。 同事之间的任何交流都只能通过调解员进行
  • 同事:代表我们系统组件的接口或抽象
  • ConcreteColleague:实现Colleague界面并愿意彼此交互的类

实施中介者模式:

让我们以一个航空交通控制系统为例。

每个航班都需要知道其着陆的可用跑道。 如果我们允许飞机之间相互通信以使他们找到可用的跑道,则会导致混乱。 相反, 最好有一个飞机交通控制室,该室可以跟踪所有可用跑道并将其分配给飞机。

让我们从定义AircraftMediatorAircraftTrafficControlRoom开始

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/341730.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

什么是中国1号信令?

中国1号信令是在电话自动交换网中&#xff0c;我国所用的随路信令的总称&#xff0c;目前在国内长途网和市话中的局间中继线上使用。那么&#xff0c;什么是中国1号信令&#xff1f;中国1号信令的分类又有哪些呢&#xff1f;接下来我们就跟随飞畅科技的小编一起来详细了解下吧&…

ejb生命周期_无状态EJB:池化和生命周期

ejb生命周期无状态EJB池和生命周期的概述视图&#xff08;注释&#xff09;。 对新手有用。 。 。 。 。 EJB池&#xff1a;快速概述 EJB实例存储在称为EJB池的位置-这不过是内存中的缓存 。 无状态EJB通常按需实例化&#xff0c;即&#xff0c;当客户端调用Bean上的方法时。…

单E1光端机分类及技术指标详解

单E1光端机是一种将G.703的E1信号调制到光纤上传输的设备。采用大规模集成芯片&#xff0c;电路简单&#xff0c;功耗低&#xff0c;可靠性高&#xff0c;具有完整的告警状态指示和完善的网管功能。那么&#xff0c;单E1光端机分类及技术指标有哪些呢&#xff1f;接下来我们就跟…

光猫的分类及应用范围有哪些?

光猫也称为单端口光端机&#xff0c;是针对特殊用户环境而设计的产品&#xff0c;它利用一对光纤进行单E1或单V.35或单10BaseT点到点式的光传输终端设备。该设备作为本地网的中继传输设备&#xff0c;适用于基站的光纤终端传输设备以及租用线路设备。而对于多口的光端机一般会直…

什么是光纤转换器?光纤转换器转换类别介绍

光纤转换器是RS-232/422/485串行数据通过光纤的远距离传输&#xff0c;可以完成串口到光纤的转换&#xff0c;并且可以延长串行通信信号的传输距离。那么&#xff0c;光纤转换器转换类别有哪些呢&#xff1f;接下来我们就跟随飞畅科技的小编一起来详细了解下吧&#xff01; 光纤…

H2数据库的Spring Boot

在本快速教程中&#xff0c;我们将引导一个由内存H2数据库支持的简单Spring Boot应用程序。 我们将使用Spring Data JPA与我们的数据库进行交互。 项目设置&#xff1a; 首先&#xff0c;让我们使用Spring Initializr生成我们的项目模板&#xff1a; 单击“生成项目”链接后&…

Java中的状态设计模式

在本教程中&#xff0c;我们将探讨另一种流行的行为设计模式-状态设计模式。 当我们使用可以存在于多个状态的对象时&#xff0c;状态设计模式的知识变得非常有用。 当对象的行为取决于其当前状态时&#xff0c;我们应该主要使用它。 这种模式有助于我们避免在该类的方法中对对…

串口服务器工作方式及常见异常故障问题排除方法介绍

串口设备联网服务器就像一台带CPU、实时操作系统和TCP/IP协议的微型电脑&#xff0c;方便在串口和网络设备中传输数据。您可以在世界任何位置通过网络&#xff0c;用您的计算机来存取&#xff0c;管理和配置远程的设备。但是我们在实际使用串口服务器的过程中&#xff0c;难免会…

E1立体声卡侬头(XLR) 音频编解码器产品介绍

FCA系列音频编解码器是一种采用数字处理芯片及大规模FPGA、数字编解码转换和时钟恢复技术方法设计的基于E1(2M)通道传输立体声广播信号的广播传送设备系统&#xff0c;它可以借助目前成熟可靠的E1传输系统网&#xff0c;建立起数字立体声广播传送系统网络&#xff0c;实现广播传…

E1视音频编解码器应用方案详细说明

E1音频编解码器&#xff0c;是采用数字处理芯片及大规模FPGA、数字编解码转换和时钟恢复技术方法设计的。适用于广播节目源传输的设备。音频编码器是将输入的立体声音频信号&#xff0c;经A/D数字编解码变换或数据格式转换后&#xff0c;重新成帧&#xff0c;形成串行数据流&am…

Java中的外观设计模式

立面是指建筑物的外观。 当穿过街道时&#xff0c;我们所看到的只是建筑物的外观。 该图面抽象了建筑物的所有复杂实施细节。 同样&#xff0c; 外观设计模式旨在为子系统中的一组接口提供统一的接口。 这个统一的接口对客户端隐藏了子系统的复杂性。 它属于结构模式类别。 J…

串口服务器介绍及产品特点详解

串口服务器提供串口转网络功能&#xff0c;能够将RS-232/485/422串口转换成TCP/IP网络接口&#xff0c;实现RS-232/485/422串口与TCP/IP网络接口的数据双向透明传输。使得串口设备能够立即具备TCP/IP网络接口功能&#xff0c;连接网络进行数据通信&#xff0c;极大的扩展串口设…

串口服务器应用领域及应用方案详解

串口服务器提供串口转网络功能&#xff0c;使得串口设备能够立即具备TCP/IP网络接口功能&#xff0c;连接网络进行数据通信&#xff0c;极大的扩展串口设备的通信距离&#xff0c;应用领域非常广泛。接下来我们就来为大家详细介绍下串口服务器的应用领域及应用方案&#xff0c;…

多串口服务器的工作方式及接线示意图介绍

串口服务器提供串口转网络功能&#xff0c;能够将RS-232/485/422串口转换成TCP/IP网络接口&#xff0c;实现RS-232/485/422串口与TCP/IP网络接口的数据双向透明传输。那么&#xff0c;多串口服务器是怎么工作&#xff0c;怎么接线的&#xff1f;接下来就由飞畅科技小编一起来为…

多路串口服务器的应用及应用范围介绍

串口服务器的应用领域很是广泛&#xff0c;主要应用在门禁系统、考勤系统、售贩系统、POS系统、楼宇自控系统、自助银行系统、电信机房监控、电力监控等。接下来就由飞畅科技的小编来为大家详细介绍下多路串口服务器的应用及应用范围&#xff0c;感兴趣的朋友就一起来看看吧&am…

工业串口服务器如何使用

串口联网服务器让传统的RS-232/422/485设备立即联网&#xff0c;利用基于TCP/IP的串口数据流传输的实现来控制管理的设备硬件是专为串口转以太网设计连接的桥梁。那么&#xff0c;我们该如何正确使用工业串口服务器呢&#xff1f;接下来我们就跟随飞畅科技的小编一起来看看吧&a…

JMetro 5.5版发布

JMetro 5.5版刚刚发布。 进行了重大更新&#xff0c;其中添加了一些错误修复&#xff0c;样式和功能。 一个新的主题测试器示例应用程序也已添加到示例子项目中&#xff0c;该应用程序测试了几项内容&#xff0c;例如控件之间的对齐。 我将尽量使这篇文章简短&#xff0c;因为…

关于工业级RS485串口服务器的组网方式详解

工业级串口服务器提供串口转网络功能&#xff0c;是实现串口&#xff08;TTL串口或RS232/RS485/RS422&#xff09;数据与TCP/IP协议数据相互转换实现数据通过网络传输的工业互联通讯设备。通过连接多个串口设备并将串口数据流进行选择和处理&#xff0c;将串口数据转换为以太网…

什么是四路串口服务器?

四路串口RS232/RS422/RS485设备联网服务器&#xff08;以下简称&#xff1a;串口服务器&#xff09;是由杭州飞畅科技自主研发的串口设备联网产品&#xff0c;其中RS232/RS422/RS485可以任意组合使用(客户可定制&#xff09;。那么&#xff0c;什么是四路串口服务器&#xff1f…

Java中的代理设计模式

代理对象或代理对象为另一个对象提供占位符&#xff0c;以控制对该对象的访问。 代理充当原始对象的轻量级版本或简化版本。 它支持与原始对象相同的操作&#xff0c;但可以将那些请求委托给原始对象以实现它们。 代理设计模式是一种结构模式&#xff0c;其中代理类包装了实际…