java 设计模式 示例_Java中的中介器设计模式-示例教程

java 设计模式 示例

中介者模式行为设计模式之一 ,因此它处理对象的行为。 中介器设计模式用于在系统中不同对象之间提供集中式通信介质。 根据GoF,中介者模式意图是:

通过封装不同对象集相互交互和通信的方式,允许松散耦合。 允许每个对象集的动作彼此独立地变化。

Mediator设计模式在企业应用程序中非常有用,在该应用程序中多个对象相互交互。 如果对象直接相互交互,则系统组件彼此紧密耦合,这使可维护性成本更高,并且难以灵活扩展。 调解器模式致力于在对象之间提供调解器以进行通信,并帮助实现对象之间的损耗耦合。

空中交通管制员是调解员模式的一个很好的例子,其中机场控制室充当不同航班之间通信的调解员。 中介器充当对象之间的路由器,并且可以具有自己的逻辑来提供通信方式。

相互通信的系统对象称为同事。 通常,我们有一个提供通信契约的接口或抽象类 ,然后我们有介体的具体实现。

对于我们的示例,我们将尝试实现一个聊天应用程序,用户可以在其中进行群聊。 每个用户都将通过其名称进行标识,他们可以发送和接收消息。 该组中的所有其他用户都应接收任何用户发送的消息。

介体介面

首先,我们将创建Mediator接口,该接口将为具体的调解人定义合同。

package com.journaldev.design.mediator;public interface ChatMediator {public void sendMessage(String msg, User user);void addUser(User user);
}

同事界面

用户可以发送和接收消息,因此我们可以具有用户界面或抽象类。 我创建用户作为抽象类,如下所示。

package com.journaldev.design.mediator;public abstract class User {protected ChatMediator mediator;protected String name;public User(ChatMediator med, String name){this.mediator=med;this.name=name;}public abstract void send(String msg);public abstract void receive(String msg);
}

请注意,用户具有对中介对象的引用,这是不同用户之间进行通信所必需的。

混凝土调解员

现在,我们将创建具体的调解器类,它将在组中具有用户列表,并为用户之间的通信提供逻辑。

package com.journaldev.design.mediator;import java.util.ArrayList;
import java.util.List;public class ChatMediatorImpl implements ChatMediator {private List<User> users;public ChatMediatorImpl(){this.users=new ArrayList<>();}@Overridepublic void addUser(User user){this.users.add(user);}@Overridepublic void sendMessage(String msg, User user) {for(User u : this.users){//message should not be received by the user sending itif(u != user){u.receive(msg);}}}}

具体同事

现在,我们可以创建供客户端系统使用的具体User类。

package com.journaldev.design.mediator;public class UserImpl extends User {public UserImpl(ChatMediator med, String name) {super(med, name);}@Overridepublic void send(String msg){System.out.println(this.name+": Sending Message="+msg);mediator.sendMessage(msg, this);}@Overridepublic void receive(String msg) {System.out.println(this.name+": Received Message:"+msg);}}

请注意,send()方法正在使用中介程序将消息发送给用户,并且不知道中介程序将如何处理该消息。

中介者模式客户端

让我们用一个简单的程序来测试我们的聊天应用程序,在该程序中,我们将创建调解器并将用户添加到组中,并且其中一个用户将发送一条消息。

package com.journaldev.design.mediator;public class ChatClient {public static void main(String[] args) {ChatMediator mediator = new ChatMediatorImpl();User user1 = new UserImpl(mediator, "Pankaj");User user2 = new UserImpl(mediator, "Lisa");User user3 = new UserImpl(mediator, "Saurabh");User user4 = new UserImpl(mediator, "David");mediator.addUser(user1);mediator.addUser(user2);mediator.addUser(user3);mediator.addUser(user4);user1.send("Hi All");}}

请注意,客户端程序非常简单,并且不知道如何处理消息以及中介程序是否正在获得用户。

上面程序的输出是:

Pankaj: Sending Message=Hi All
Lisa: Received Message:Hi All
Saurabh: Received Message:Hi All
David: Received Message:Hi All

中介者模式类图

调解人模式

JDK中的中介者模式

  • java.util.Timer类scheduleXXX()方法
  • Java并发执行程序 execute()方法。
  • java.lang.reflect.Method invoke()方法。

重要事项

  • 当对象之间的通信逻辑很复杂时,调解器模式非常有用,我们可以拥有一个负责通信逻辑的中心通信点。
  • Java消息服务(JMS)使用Mediator模式和Observer模式来允许应用程序向其他应用程序订阅和发布数据。
  • 我们不应该仅仅使用调解器模式来实现损失耦合,因为如果调解器的数量增加,那么将很难维持它们。

参考: Java中的介体设计模式– JCG合作伙伴 Pankaj Kumar在开发人员食谱博客上的示例教程 。

翻译自: https://www.javacodegeeks.com/2013/08/mediator-design-pattern-in-java-example-tutorial.html

java 设计模式 示例

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

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

相关文章

二级倒立摆系统的稳定控制与仿真(Matlab/Simulink)

前些天发现了十分不错的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;没有广告&#xff0c;分享给大家&#xff0c;大家可以自行看看。&#xff08;点击跳转人工智能学习资料&#xff09; 微信公众号&#xff1a;创享日记 发送&#xff1a;二级倒立摆…

伪随机交织抑制突发噪声的MATLAB仿真(采用(2,1,3)卷积码)

在上一篇文章中 BPSK调制下(2,1,3)、(2,1,6)卷积码与QC-LDPC码译码性能和抑制突发噪声性能对比(MATLAB实现) 伪随机交织抑制突发噪声的仿真曲线不是很明显,虽然之前的程序没问题的,只是那样不好表现出伪随机交织的性能,突发奇想,换了一种方式,一帧一帧的做,正好利用MA…

电磁场与电磁波实验四 熟悉CST Studio软件在电磁领域的应用

微信公众号&#xff1a;创享日记 发送&#xff1a;cst 免费获取完整报告 一、实验要求 要求&#xff1a;仿真H面90波导弯头的S参数 尺寸&#xff1a; 2x4x10cm 频带&#xff1a;4~5GHz 二、实验过程 1.创建第一个立方体 2.设置旋转轴 3.选取端面&#xff0c;设置旋转结构&am…

(2,1,3)卷积码与一种QC-LDPC码的译码性能对比

在上一篇文章中 BPSK调制下(2,1,3)、(2,1,6)卷积码与QC-LDPC码译码性能和抑制突发噪声性能对比(MATLAB实现) 重写了(2,1,3)卷积码与一种QC-LDPC码的译码性能对比代码,同样采用MATLAB中的CPU并行计算,能够提高程序运行速度。 结果如下: 代码如下: clear; close all; c…

科学计算与仿真-高斯牛顿法的非线性最小二乘问题简单介绍与应用

微信公众号&#xff1a;创享日记 发送&#xff1a;高斯牛顿 获取完整报告&#xff08;含源程序代码&#xff09; 一、问题的提出 在日常生活和科学研究中&#xff0c;人们经常会遇到这样一类问题&#xff1a;在某些条件下&#xff0c;寻求某一数量指标的最大或最小值。例如&…

一种QC-LDPC码对突发噪声抑制的MATLAB仿真

欢迎同步关注公众号【逆向通信猿】 对博客BPSK调制下(2,1,3)、(2,1,6)卷积码与QC-LDPC码译码性能和抑制突发噪声性能对比(MATLAB实现)中 LDPC码对突发噪声的抑制性能作一个补充仿真,结果如下 代码如下: % LDPC code clear; close all; clc Nb = 203000; % number of bit…

锅炉汽包温度控制系统设计(过程控制课程设计matlab/simulink)

微信公众号&#xff1a;创享日记 发送&#xff1a;锅炉汽包 获取完整报告matlab/simulink仿真源文件 一、组员任务分工说明 xxx同学负责绘画出带控制点的工艺流程图&#xff0c;并构建控制方案的原理方框图。xxx同学完成了在MATLAB中仿真模型的搭建&#xff0c;参数调试和仿真结…

仿王者荣耀网页-前端网页技术设计完整精美源码HTML+CSS+JS

效果预览①主页首页 效果预览②游戏介绍页 效果预览③游戏攻略页 效果预览④手办商城页 效果预览⑤问卷调查页 效果预览⑥加入我们页 微信公众号&#xff1a;创享日记 发送&#xff1a;王者荣耀 获取完整源码&#xff08;打开即可用&#xff09; 其余及源码详见下载&…

仿今日头条实时新闻微信小程序项目源码

微信公众号&#xff1a;创享日记 发送&#xff1a;今日头条 获取完整源码&#xff08;微信开发者工具导入即可用&#xff09; 以下可以忽略不看&#xff01; 今日头条是北京字节跳动科技有限公司开发的一款基于数据挖掘的推荐引擎产品&#xff0c;为用户推荐信息、提供连接人与…

perl大骆驼和小骆驼_从代码内部:骆驼路由引擎第一部分

perl大骆驼和小骆驼因此&#xff0c;最近我重新燃起了对Apache Camel的工作方式的兴趣。 Camel是一种功能强大的集成工具&#xff0c;使用非常广泛&#xff0c;但是只要我将其投入使用&#xff0c;我都会忍不住想“好吧&#xff0c;这到底是怎么做的&#xff01;” …我只是有一…

高频小信号谐振放大器设计-课程设计Multisim仿真

前些天发现了十分不错的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;没有广告&#xff0c;分享给大家&#xff0c;大家可以自行看看。&#xff08;点击跳转人工智能学习资料&#xff09; 微信公众号&#xff1a;创享日记 发送&#xff1a;高频课设 获…

微波技术基础实验二 功分器与定向耦合器设计

前些天发现了十分不错的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;没有广告&#xff0c;分享给大家&#xff0c;大家可以自行看看。&#xff08;点击跳转人工智能学习资料&#xff09; 微信公众号&#xff1a;创享日记 发送&#xff1a;耦合器 获取…

微波技术基础实验一 滤波器的设计

微信公众号&#xff1a;创享日记 发送&#xff1a;滤波器 获取完整报告工程源文件 一、新建滤波器工程和设计原理图 新建一个workspace&#xff0c;并创建原理图。在图中放置电容、电感并用导线连接。双击电容和电感&#xff0c;设置电容为2pF&#xff0c;电感为1.5nH&#xff…

微波技术大作业课设-分立电容电感+微带单枝短截线+微带双枝短截线

前些天发现了十分不错的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;没有广告&#xff0c;分享给大家&#xff0c;大家可以自行看看。&#xff08;点击跳转人工智能学习资料&#xff09; 微信公众号&#xff1a;创享日记 发送&#xff1a;微带 获取完…

java 观察者模式示例_Java中的观察者设计模式-示例教程

java 观察者模式示例观察者模式是行为设计模式之一 。 当您对对象的状态感兴趣并希望在发生任何更改时得到通知时&#xff0c;观察者设计模式很有用。 在观察者模式中&#xff0c;监视另一个对象状态的对象称为Observer &#xff0c;而正在监视的对象称为Subject 。 根据GoF&am…

电磁场与电磁波实验一 熟悉Matlab软件在电磁场领域的应用

前些天发现了十分不错的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;没有广告&#xff0c;分享给大家&#xff0c;大家可以自行看看。&#xff08;点击跳转人工智能学习资料&#xff09; 微信公众号&#xff1a;创享日记 发送&#xff1a;matlab电磁…

高斯信道下基带模型的多用户BPSK直接序列扩频系统MATLAB仿真(m序列、Gold序列和正交Gold序列)(代码见CSDN同名资源,博客中也有代码)

关注公号【逆向通信猿】更精彩!!! 一、伪随机序列PN码的生成 伪随机序列有很多种,如m序列、Gold序列和正交Gold序列,其中m序列的构造及MATLAB生成方法见: 线性移位寄存器序列(m序列)之MATLAB实现 m序列虽然性能优良,但同样长度的m序列个数不多,且m序列之间的互相…

信号处理系统综合设计-求解器函数的设计(连续和离散时间系统)

微信公众号&#xff1a;创享日记 发送&#xff1a;求解器 获取完整报告&#xff08;含源程序代码结果分析&#xff09; 一、在s域分析连续时间系统的方法 一个线性时不变连续时间系统可以用线性常系数微分方程描述&#xff0c;对系统的时域分析可归结为利用数学方法对该方程求解…

OFFICE2019精简安装D盘(包括Word、PPT、Excel,可根据需要调整)+VISIO2019+Mathtype7.4.0完美下载安装教程

经过笔者测试&#xff0c;64位的OFFICE2019、VISIO2019对MathType兼容性很差&#xff0c;时不时出现问题&#xff0c;且网上能查阅到的解决办法均不能很好地解决。 无奈之下换回32位的OFFICE2019&#xff0c;配合MathType7.4.0&#xff0c;简直完美&#xff0c;现将OFFICE 201…

仿知乎论坛社区社交微信小程序

微信公众号&#xff1a;创享日记 发送&#xff1a;仿知乎 获取完整源码&#xff08;静态数据&#xff09;&#xff0c;导入微信开发者工具即可 说明&#xff1a;源码主要是前端&#xff0c;后端可自行开发 1、首页 问题列表 话题列表 触底加载刷新 2、问题列表及回答 3、发现…