Java23种设计模式-行为型模式之中介者模式

中介者模式(Mediator Pattern),也称为仲裁者模式,定义了一个中介对象,用以封装一系列对象之间的交互。中介者使各个对象不需要显示地相互引用,从而使耦合度降低,而且可以独立地改变它们之间的交互。

具体组成
中介者(Mediator):定义了同事对象如何与其进行通信的接口。
具体中介者(ConcreteMediator):实现了中介者接口,通过具体同事类的对象来改进各同事之间的交互。
同事类(Colleague):定义了中介者模式中各个对象的接口,这些对象不直接交互,而是通过中介者对象来进行。
具体同事类(ConcreteColleague):每一个具体同事类都实现了在同事类中定义的接口,并且它们都持有一个中介者对象的引用。

优点
减少了对象之间的依赖,每个对象不需要知道其他对象的实现细节。
通过中介者对象可以方便地进行整个系统的协调。
缺点
当系统中对象很多时,中介者对象可能会变得非常复杂。

适用场景
当一个系统由许多对象组成,而这些对象之间的交互非常频繁时。
当对象之间的交互变得非常复杂时,使用中介者模式可以简化对象之间的交互。

示例:设置一个聊天室系统,用户之间的消息传递通过一个聊天室中介者进行。

// 中介者接口
interface Mediator {void sendMessage(String message, User user);
}// 具体中介者
class ChatRoom implements Mediator {public void sendMessage(String message, User user) {System.out.println("From " + user.getName() + " to all: " + message);}
}// 同事类接口
abstract class User {protected String name;protected Mediator mediator;public User(String name, Mediator mediator) {this.name = name;this.mediator = mediator;}public abstract void receiveMessage(String message);
}// 具体同事类
class ConcreteUser extends User {public ConcreteUser(String name, Mediator mediator) {super(name, mediator);}public void receiveMessage(String message) {System.out.println("To " + name + " " + message);}public void sendMessage(String message) {mediator.sendMessage(message, this);}
}// 客户端
public class Client {public static void main(String[] args) {Mediator mediator = new ChatRoom();User user1 = new ConcreteUser("User1", mediator);User user2 = new ConcreteUser("User2", mediator);((ConcreteUser) user1).sendMessage("Hello, User2!");((ConcreteUser) user2).sendMessage("Hi, User1!");}
}

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

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

相关文章

数据分析:甲基化分析-从DNA methylation的IDAT文件到CpG site的Beta values

介绍 DNA Methylation和疾病的发生发展存在密切相关,它一般通过CH3替换碱基5‘碳的H原子,进而调控基因的转录。常用的DNA methylation是Illumina Infinium methylation arrays,该芯片有450K和850K(也即是EPIC)。 该脚…

Mac虚拟机装Windows Mac环境安装Win虚拟机教程 macbookpro安装windows虚拟机

在如今多元的数字时代,我们经常需要在不同的操作系统环境下进行工作和学习。而对于Mac用户来说,有时候需要在自己的电脑上安装Windows操作系统,以体验更多软件及功能,而在Mac安装Windows虚拟机是常用的一种操作。下面就来看看Mac虚…

学习 Rust 的第十二天:如何使用向量

大家好, 今天我们来看看计算机科学中的一种基本数据结构,即向量。向量在 Rust 中扮演着至关重要的角色,它在各种编程任务中都发挥着重要作用。像 Rust 这样的系统编程语言以其对安全性和性能的强调而闻名,因此向量提供了一些强大…

flutter开发实战-build apk名称及指令abiFilters常用gradle设置

flutter开发实战-build apk名称及指令abiFilters常用gradle设置 最近通过打包flutter build apk lib/main.dart --release,发现apk命名规则需要在build.gradle设置。这里记录一下。 一、apk命名规则 在android/app/build.gradle中需要设置 android.applicationVa…

数字身份管理:Facebook如何利用区块链技术?

随着数字化进程的加速,个人身份管理已成为一个关键议题。在这方面,区块链技术正在逐渐展现其巨大潜力。作为全球最大的社交媒体平台,Facebook也在积极探索和应用区块链技术来改进其数字身份管理系统。本文将深入探讨Facebook如何利用区块链技…

回归与聚类——模型保存与加载(五)

sklearn模型的保存和加载API from sklearn.externals import joblib保存:joblib.dump(rf,‘test.pkl’)加载:estimator joblib.load(‘test.pkl’) 线性回归的模型保存加载案例 获取数据、划分数据集、标准化、预估器、保存模型、得出模型、模型评估 /…

巴西游戏市场海外营销洞察

巴西作为南美洲最大的国家,近年来在游戏产业领域取得了显著的发展,2023年巴西整体移动游戏市场收入规模超60亿元,显示出强劲的市场活力。巴西游戏市场以其庞大的用户基础,不断增长的消费能力以及日益完善的产业环境,吸…

VSCODE通过SFTP链接VM进行开发

在vscode插件里面搜索sftp,安装。 安装之后,按ctrlshiftp,找到sftp的config 然后填写刚刚的IP,然后是你的用户名密码 如果是通过密钥链接的话就是这样配置 然后切换到这个sftp的tab里面 然后在你的项目右键,然后选择op…

el-date-picker 禁用时分秒选择(包括禁用下拉框展示)

2024.04.26今天我学习了对el-date-picker进行禁用时分秒, 在使用el-date-picker组件的时候,我们有可能遇到需要把时分秒的时间固定,然后并且不能让他修改: 1714120999296 比如右上角的这个时间,我们要给它固定是‘08:…

CSP初赛知识精讲--线性数据结构

第十五节 线性树形结构 基础知识 线性表 线性表是指由n个具有相同特性的数据元素组成的有限序列,是最基本、最简单,也是最常用的一种数据结构。队列、栈、链表、哈希表等数据结构逻辑上都属于线性表。一般来讲,表中数据之间的关系是一对一的…

WPS Word自动编号转文本

原理 使用WPS自带的宏功能,一键替换 过程 调出"开发工具"选项 文件->选项->自定义功能区->选中开发工具->确认 创建宏 工具 -> 运行宏 编写宏 在弹出来的框里,粘贴代码 如果弹窗类似如下,这是JS宏 则…

Spark-机器学习(5)分类学习之朴素贝叶斯算法

在之前的文章中,我们学习了回归中的逻辑回归,并带来简单案例,学习用法,并带来了简单案例。想了解的朋友可以查看这篇文章。同时,希望我的文章能帮助到你,如果觉得我的文章写的不错,请留下你宝贵…

日期操作类 + http、https 请求工具类 + 开发环境 忽略 SSL 验证工具类 + 二维码工具类

日期操作类 package com.pay.common.util;import java.text.SimpleDateFormat; import java.util.Date; /*** 日期操作类* 创建者 科帮网* 创建时间 2017年7月31日*/ public class DateUtils {private final static SimpleDateFormat sdfYear new SimpleDateFormat("yyy…

阿里云企业邮箱API的使用方法?调用限制?

阿里云企业邮箱API性能如何优化?配置邮箱API的优势? 阿里云企业邮箱以其稳定、高效和安全的特点,受到了众多企业的青睐。而阿里云企业邮箱API的开放,更是为企业提供了更加灵活、便捷的管理和操作方式。下面,我AokSend…

前端文本框插入标签(错误新增红色错误文字)

近期产品需求遇到一个问题,需要在查询输入框输入内容之后,需要 提示由后端返回不匹配文字,并且标红 有几种解决方案 1、最简单的方法是在输入框外,如它的下面新增 错误提示文字信息,最后正则匹配替换高亮错误文字 2…

用过最佳的wordpress模板

西瓜红,作为一种充满活力和激情的颜色,总是能给人留下深刻的印象。当这种鲜艳的色彩与经典的设计元素相结合时,就能打造出一款既时尚又实用的WordPress企业模板。今天,我们向您隆重推荐这款西瓜红经典配色WordPress企业模板。 这…

User Agent 解析:它是什么以及工作原理

什么是User Agent? UserAgent,简称UA,是一个使服务器能够识别用户使用的浏览器类型、版本以及运行浏览器的操作系统等信息的字符串。它作为浏览器请求头部信息的一部分发送给服务器,以便服务器可以返回合适格式和版本的内容。 跟Cookie一样…

proteus+stm32+CubeMX+dht11+lcd1602

浅浅记录下过程遇到的问题🤡🤡🤡 1 供电网配置错误(加上就好了 新起个名也会出这个 / 电源不起名 不创建估计项目也会)没zet6的 proteus 里 固件库 账号注册半天没成 就用的stm32F103R6的然后发现单片机不输出高低电平…

阿里云服务器开放端口的最最最正确的方法

今天,我突然发现阿里云服务器端口无法访问ElasticSearch了,嗯???肿么回事,搜遍了全网,终于在我身心俱疲后找到了原因: 现在我来总结一下出现这种问题的原因以及解决步骤 &#xff1a…

电机入门1

文章目录 122.12.22.3 33.13.23.33.4 1 2 2.1 电机板 驱动板电机分类 驱动器分类 转速 转向扭矩定时器 ADC 2.2 PID 自动控制 的核心闭环控制算是 PID的应用 2.3 无刷电机用的 可大大提高其控制效率 和控制精度 3 开发板的IO 电流太小了 20~25ma 电机要A 驱动板 信号放大没舵…