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 设计模式 示例

java 设计模式 示例_Java中的中介器设计模式-示例教程相关推荐

  1. Java中的中介器设计模式-示例教程

    中介者模式是行为设计模式之一 ,因此它处理对象的行为. 中介器设计模式用于在系统中不同对象之间提供集中式通信介质. 根据GoF,中介者模式意图是: 通过封装不同对象集相互交互和通信的方式,允许松散耦合 ...

  2. java设计模式之装饰模式_Java中的装饰器设计模式

    java设计模式之装饰模式 装饰器设计模式允许在运行时将附加职责或行为动态附加到对象. 它是一种结构模式,利用聚合来组合这些行为. 在本教程中,我们将学习实现装饰器模式. UML图: 让我们从装饰器模 ...

  3. java url类_Java中的URL类和示例 - Break易站

    URL类是Internet上任何可用资源的网关.类URL表示统一资源定位符,它是指向万维网上"资源"的指针.资源可以指向简单的文件或目录,也可以引用更复杂的对象,例如对数据库或搜索 ...

  4. Java中的中介器设计模式

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

  5. java 继承示例_Java中的继承类型以及示例

    java 继承示例 Prerequisite: Inheritance and its implementation in Java 先决条件: 继承及其在Java中的实现 Java中的继承类型 (T ...

  6. map java 初始化赋值_Java 中 HashMap 初始化时赋值(示例代码)

    1.HashMap 初始化的文艺写法 HashMap 是一种常用的数据结构,一般用来做数据字典或者 Hash 查找的容器.普通青年一般会这么初始化: HashMap map = new HashMap ...

  7. java 设计模式 示例_Java示例中的装饰器设计模式

    java 设计模式 示例 Decorator design pattern is used to modify the functionality of an object at runtime. A ...

  8. java 设计模式 示例_Java中的访问者设计模式–示例教程

    java 设计模式 示例 访客模式是行为设计模式之一 . 当我们必须对一组相似类型的对象执行操作时,将使用访问者模式. 借助访问者模式,我们可以将操作逻辑从对象移动到另一个类. 例如,假设有一个购物车 ...

  9. Java中的装饰器设计模式

    装饰器设计模式允许在运行时将附加职责或行为动态附加到对象. 它是一种结构模式,利用聚合来组合这些行为. 在本教程中,我们将学习实现装饰器模式. UML图: 让我们从装饰器模式的UML表示开始: Con ...

最新文章

  1. 实现一个简单的投票功能
  2. oracle 越南字符,ORACLE 12.2RAC之问题 ora.chad OFFLINE
  3. 2 时间格式化_U盘无法格式化怎么办 U盘无法格式化解决教程【详解】
  4. 如何用CS07进行BOM工厂分配
  5. 并发工具类(一)等待多线程完成的CountDownLatch
  6. Spring Cloud构建微服务架构:服务容错保护(Hystrix依赖隔离)【Dalston版】
  7. 使用redis批量生成主键(订单)Id
  8. Cocos2d-x-使用脚本概述
  9. 每天工作忙,学会python自动收发邮件,代替你问候女友
  10. 2020年的工程咨询将如何影响建设工程?
  11. BAT转EXE 小程序
  12. 机器翻译评价指标BLEU介绍
  13. 【web素材】11—15套免费网站后台管理模板
  14. certificate expired
  15. 2021-11-06大数据学习日志——数据埋点+网络爬虫——数据提取
  16. 产品经理如何写好产品需求文档
  17. 一套完整的硬件电路设计该怎么做?
  18. 用Java写一个年薪计算器,助你简单完成大量税前税后总薪计算量
  19. Centos7 常用的命令
  20. c盘越来越大怎么清理?清理C:\Windows\System32\DriverStore\FileRepository

热门文章

  1. dp 树状数组 逆序元组
  2. org.apache.ibatis.builder.BuilderException: Could not find value method on SQL annotation
  3. JAVA实现汉字转换为拼音 pinyin4j/JPinyin
  4. 架构师必须掌握的各种编码:ASCII、ISO-8859-1、GB2312
  5. Maven精选系列--过滤不同环境配置文件
  6. 轻松几步搞定SSH连接Git配置
  7. ssh(Spring+Spring mvc+hibernate)——IDeptService.java和IEmpService.java
  8. Truebine聚合监控
  9. Spring的properties属性配置文件和Spring常用注解
  10. Android RaingBar评分条的使用