19-Java中介者模式 ( Mediator Pattern )

Java中介者模式

    • 摘要
    • 实现
    • 范例

  • 中介者模式(Mediator Pattern)提供了一个中介类,该类通常处理不同类之间的通信,并支持松耦合,使代码易于维护
  • 中介者模式是用来降低多个对象和类之间的通信复杂性
  • 中介者模式属于行为型模式

摘要

1. 意图

  • 用一个中介对象来封装一系列的对象交互,中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互

2. 主要解决

  • 对象与对象之间存在大量的关联关系,这样势必会导致系统的结构变得很复杂,同时若一个对象发生改变,我们也需要跟踪与之相关联的对象,同时做出相应的处理

3. 何时使用

  • 多个类相互耦合,形成了网状结构

4. 如何解决

  • 将上述网状结构分离为星型结构

5. 关键代码

  • 对象Colleague 之间的通信封装到一个类中单独处理

6. 应用实例

  • 中国加入WTO之前是各个国家相互贸易,结构复杂,现在是各个国家通过WTO来互相贸易;
  • 机场调度系统;
  • MVC框架,其中C(控制器)就是M(模型)和V(视图)的中介者;

7. 优点

  • 降低了类的复杂度,将一对多转化成了一对一;
  • 各个类之间的解耦;
  • 符合迪米特原则;

8. 缺点

  • 中介者会庞大,变得复杂难以维护

9. 使用场景

  • 系统中对象之间存在比较复杂的引用关系,导致它们之间的依赖关系结构混乱而且难以复用该对象;
  • 想通过一个中间类来封装多个类中的行为,而又不想生成太多的子类;

10. 注意事项

  • 不应当在职责混乱的时候使用

实现

在这里插入图片描述

我们通过聊天室实例来演示中介者模式:多个用户可以向聊天室发送消息,聊天室向所有的用户显示消息

  1. 定义中介类ChatRoom;
  2. 定义用户类User,User对象使用ChatRoom方法来分享他们的消息;
  3. 定义MediatorPatternDemo类使用User对象来显示他们之间的通信;

范例

1. 创建中介类

ChatRoom.java

package com.demo.gof;
import java.util.Date;public class ChatRoom {public static void showMessage(User user, String message){System.out.println(new Date().toString()+ " [" + user.getName() +"] : " + message);}
}

2. 创建 user 类

User.java

package com.demo.gof;
public class User {private String name;public String getName() {return name;}public void setName(String name) {this.name = name;}public User(String name){this.name  = name;}public void sendMessage(String message){ChatRoom.showMessage(this,message);}
}

3. 使用 User 对象来显示他们之间的通信

MediatorPatternDemo.java

package com.demo.gof;
public class MediatorPatternDemo {public static void main(String[] args) {User robert = new User("Robert");User john = new User("John");robert.sendMessage("Hi! John!");john.sendMessage("Hello! Robert!");}
}

编译运行以上 Java 范例,输出结果如下

$ javac -d . src/main/com.demo/gof/MediatorPatternDemo.java
$ java  com.demo.gof.MediatorPatternDemo
Thu Jan 31 16:05:46 IST 2013 [Robert] : Hi! John!
Thu Jan 31 16:05:46 IST 2013 [John] : Hello! Robert!

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

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

相关文章

内衣洗衣机怎么选?2024年度最新爆品内衣洗衣机测评

内衣裤洗衣机是一种非常实用的洗衣机,可以有效地保护内衣和贴身衣物的质量和卫生,相比于普通的家用大型洗衣机,内衣裤洗衣机在容量、洗涤方式、控制方式和价格等方面有很大的不同之处,如果您经常需要清洗内衣和贴身衣物&#xff0…

Python实战小项目-骰子模拟器+Turtle绘图

Python实战小项目-骰子模拟器Turtle绘图 骰子模拟器Turtle绘图 骰子模拟器 导入了random模块,该模块提供了生成随机数的功能。 定义了两个变量min_val和max_val,分别表示骰子的最小值和最大值。在这个例子中,骰子的最小值为1,最大…

SpringMVC 中的常用注解和用法

⭐ 作者:小胡_不糊涂 🌱 作者主页:小胡_不糊涂的个人主页 📀 收录专栏:JavaEE 💖 持续更文,关注博主少走弯路,谢谢大家支持 💖 注解 1. MVC定义2. 注解2.1 RequestMappin…

【python基础学习11课_异常机制】

一、异常 1、异常的定义 异常:程序无法继续执行异常会中断程序执行异常处理,是为了不中断程序执行。而不是避免错误。有些代码是报错就是要暴露出来有了异常机制,错误的代码报错后抛出异常,代码从上到下,报错代码后面…

AI嵌入式CanMV-K230项目(1)-简介

文章目录 前言一、嘉楠的产品体系二、开发板介绍三、应用领域总结 前言 前一些列文章我们介绍了K210的使用方法,近期嘉楠科技发布了最新一版的K230芯片,下面我们来了解下这款芯片,后续我们将介绍该款芯片开发板的使用方法。 一、嘉楠的产品体…

javascript操作BOM的方法

目录 1.window.alert() 2.window.confirm() 3.window.prompt() 4.window.location() 5.window.navigator() 6.window.screen() 7.window.history() 8.window.setTimeout() 和 window.clearTimeout() 9.window.setInterval() 和 window.clearInterval() BOM&#xff08…

基于51单片机的万年历-心率脉搏计仿真及源程序-保存心率记录

基于51单片机的万年历-心率脉搏计仿真及源程序-保存心率记录 一、系统方案 1、本设计采用51单片机作为主控器。 2、液晶1602显示。 3、DS1302万年历,测心率,按键设置万年历、心率上下限,不在范围蜂鸣器报警。 4、心率测量值保存3组数据。 二、…

C语言内存优化实用指南

一、引言 在C语言编程中,内存管理是一项至关重要的任务。有效的内存优化可以提升程序的性能,减少资源消耗,并防止可能出现的内存泄漏和溢出问题。以下是一些关于C语言内存优化的实用指南。 二、理解内存管理 在C语言中,程序员需…

蓝桥杯物联网竞赛_STM32L071_11_知识体系的查漏与补缺

太久没学单片机了,再重新过一遍查漏补缺,对其中之前没怎么在意的,而现在又发觉的问题进行再分析与补充 1. debug serial wire是干什么用的 这个东西我勾选不勾选都对我的程序没有什么影响,我很好奇是干什么用的,网上查…

蓝桥杯(3.5)

789. 数的范围 import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner sc new Scanner(System.in);int n sc.nextInt();int q sc.nextInt();int[] res new int[n];for(int i0;i<n;i)res[i] sc.nextInt();while(q-- ! 0) {int…

精准测试(针对人工执行的测试用例和自动化测试脚本)

在软件测试中&#xff0c;我们常常碰到两个基本问题&#xff08;困难&#xff09;&#xff1a; 很难保障无漏测&#xff1a;我们做了大量测试&#xff0c;但不清楚测得怎样&#xff0c;对软件上线后会不会出问题&#xff0c;没有信心&#xff1b;选择待执行的测试用例&#xf…

[网络安全] PKI

一、PKI 概述 名称; 公钥基础设施 (Public Key Facility) 作用: 通过加密技术和数字签名保证信息安全 组成: 公钥机密技术、数字证书、CA、RA 二、信息安全三要素 机密性&#xff1a;确保仅信息发收双方 能看懂信息 完整性&#xff1a; 确保信息发收完整&#xff0c;不被破坏 …