中介模式实现聊天室

中介者模式的核心逻辑就是解耦对象‘多对多’的相互依赖关系。当遇到一大堆混乱的对象呈现“网状结构”,利用通过中介者模式解耦对象之间的通讯。

代码案例

抽象中介类

public abstract class AbstractChatRoom {public abstract void notice(String message , User user); //声明notice方法public abstract void register(User user);
}

实现中介类

package com.example.dyc.mymedia;import java.util.ArrayList;
import java.util.List;public class ChatRoom extends AbstractChatRoom {  //继承AbstractChatRoompublic List<User> users = new ArrayList<>();  //声明列表类存储User@Overridepublic void register(User user){   //登录添加用户users.add(user);}@Overridepublic void notice(String message,User user){  //notice方法的重写for(User u : users){   //遍历if(u != user){u.getMessage(message);}}}
}

User

package com.example.dyc.mymedia;public abstract class User {   //抽象类protected AbstractChatRoom chatRoom;  //聊天室对象public User(AbstractChatRoom chatRoom){this.chatRoom = chatRoom;this.chatRoom.register(this);}public abstract void sendMessage(String msg);  //声明发送消息的方法public abstract void getMessage(String msg);   //声明接收消息的方法
}

UserA:

package com.example.dyc.mymedia;//UserA
public class UserA extends User {private String userId;public UserA(String userId, AbstractChatRoom chatRoom) {super(chatRoom);this.userId = userId;}@Overridepublic void sendMessage(String msg){System.out.println(userId + "发送 "+msg);chatRoom.notice(msg,this);}@Overridepublic void getMessage(String msg){System.out.println(userId + "收到 "+msg );}
}

客户端

public class MyTest {public static void main(String[] args) {ChatRoom chatRoom = new ChatRoom();UserA userLi = new UserA("小李", chatRoom);UserA userWa = new UserA("小娃", chatRoom);userLi.sendMessage("我是小李");System.out.println("===================");userWa.sendMessage("我是小娃");}
}

参考资料:

Java-设计模式(中介模式实现聊天室)_使用设计模式实现聊天室要求真实实现-CSDN博客

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

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

相关文章

计网期末复习指南(六):应用层(DNS、FTP、URL、HTTP、SMTP、POP3)

前言&#xff1a;本系列文章旨在通过TCP/IP协议簇自下而上的梳理大致的知识点&#xff0c;从计算机网络体系结构出发到应用层&#xff0c;每一个协议层通过一篇文章进行总结&#xff0c;本系列正在持续更新中... 计网期末复习指南&#xff08;一&#xff09;&#xff1a;计算…

Java18+​App端采用uniapp+开发工具 idea hbuilder智能上门家政系统源码,一站式家政服务平台开发家政服务

Java18​App端采用uniapp开发工具 idea hbuilder智能上门家政系统源码&#xff0c;一站式家政服务平台开发 家政服务 家政服务是一个专为家政服务人员设计的平台&#xff0c;该平台旨在提供便捷、高效的工作机会&#xff0c;同时确保服务质量和客户体验。 以下是关于家政服务师…

python入门1

文章目录 前言一、python概述1、下载和安装2、python基础2.1 变量2.2 数据类型2.3Python中的注释2.4 运算符2.5 数值类型标准类型函数2.6 I/O操作 二、字符串1、字符串操作2、字符串内建函数3、格式化字符串3.1 在字符串中使用变量3.2 format()方法的基本使用 三、列表与元组1、…

鸿蒙工程目录介绍

鸿蒙构建完毕生成hhvp文件。 项目结构&#xff1a; .hvigor : 是存储构建配置文件的 .idea : 是开发工具拥有的目录 AppScope : 是全局的公共资源存放位置 hvigor &#xff1a;存放前端构建配置信息 oh_modules : 存放项目用到的第三方包 build-profile.json5 : 应用级别的构…

Mysql基础教程(15):别名

MySQL 别名 在本文中&#xff0c;我们讨论了 MySQL 中的列别名&#xff0c;表别名和派生表别名&#xff0c;以及使用别名来简化 SQL 和提高 SQL 的可读性。 如果在一个 SQL 中涉及到多个表&#xff0c;我们需要使用 table_name.column_name 这样的方式来引用每个表的字段&…

麒麟系统 安装xrdp 远程桌面方法记录

一、安装环境 麒麟V10 2107 ft2000 麒麟V10 2107 x86_64 二、安装准备 使用《Kylin-Desktop-V10-Release-2107-arm64.iso》镜像 做好U盘启动系统后&#xff0c;需要安装一个远程桌面工具&#xff0c;可以多用户在windows上使用远程桌面访问麒麟系统。 目前在linux系统上较…

一站式解决方案,电话客服软件系统助您轻松应对客户需求

一、引言 在当今竞争激烈的市场环境中&#xff0c;优质的客户服务已成为企业赢得客户信任、保持竞争优势的关键。电话客服作为企业与客户之间沟通的重要桥梁&#xff0c;其服务质量和效率直接影响到客户的满意度和企业的品牌形象。然而&#xff0c;随着客户需求的多样化和个性…

Text2SQL之不装了,我也是RAG

文章目录 背景核心策略关键步骤效果使用SQL fewshot使用上下文相关fewshot一些优化背景 对业务数据库中的表实现问答。输入是用户的问题,输出是该问题的答案。 这是很典型的Text2SQL的应用场景了,为了实现这一需求,很容想到的是把创建的表和表的描述都放进prompt里,让LLM…

做项目管理,有哪些证书值得考?

考证可以提升技能水平&#xff0c;增强职场竞争力。 01PMP认证 PMP是受全球认可的项目管理专业人士资格认证&#xff0c;在国际上具有权威性&#xff0c;被媒体公认为继MBA、MPA之后的三大就业金字招牌。 在国内认可度也很高&#xff0c;中石油、中国石化、中兴通讯等大型企…

使用目标检测模型YOLO V9 OBB进行旋转目标的检测:训练自己的数据集(基于卫星和无人机的农业大棚数据集)二

在网上看到别人在YOLO V9 源码上实现了旋转目标检测&#xff0c;但是我在按照他的方法进行训练的时候出现了错误提示&#xff0c;问题弄了很久都没有解决&#xff0c;欢迎各位大佬交流讨论给出建议 代码【免费】目标检测模型YOLOV9OBB资源-CSDN文库 运行训练脚本train.py提示如…

探讨微服务架构如何降低系统复杂度

深入探讨微服务架构如何降低系统复杂度 一、引言&#xff1a;从单体到微服务的演变 在数字化转型的浪潮下&#xff0c;企业面临着前所未有的挑战&#xff0c;其中之一就是如何构建和维护日益复杂的IT系统。传统的单体应用虽然在初期能够满足需求&#xff0c;但随着业务的扩张…

【Python】 Python装饰器的魔法:深入理解functools.wraps

基本原理 在Python中&#xff0c;装饰器是一种设计模式&#xff0c;用于修改或增强函数或方法的功能。functools.wraps是一个装饰器工厂&#xff0c;它用来帮助我们保持被装饰函数的元数据&#xff0c;比如函数的名字、文档字符串等。 当你创建一个装饰器时&#xff0c;你可能…

【mysql】ssl_choose_client_version:unsupported protocol

起因&#xff1a;项目上的DolphinScheduler连接不上数据库&#xff0c;查看worker日志提到SSL协议问题&#xff1a; com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failureCaused by: java.io.EOFException: SSL peer shut down incorrectly 我…

eNSP【综合实验】

综合实验配置 实验要求实验命令实验要求 1、设备名称修改。例如“交换机LSW1,修改为SW1”;“路由器AR1,即修改为AR1” 2、内网中的所有PC与网关互通。 要求:配置vlan基础部分,设置端口类型以及所允许通过的vlan,利用vlan的三层交换使得PC与网关互通。 PC1、PC2和Server1的…

MySQL主从的延迟怎么解决呢?

以下是一些减少或解决MySQL主从延迟的策略&#xff1a; 优化查询和索引&#xff1a; 确保所有的查询都经过优化&#xff0c;以减少主服务器上的负载。使用合适的索引来加速查询速度&#xff0c;减少锁的时间。 分散复制负载&#xff1a; 使用多个从服务器分散读取负载。使用并…

什么牌子的无线领夹麦克风好?一文读懂领夹麦克风什么牌子好!

​无线领夹麦克风因其便携性和高音质而备受青睐。今天&#xff0c;我要为大家推荐几款备受赞誉的无线领夹麦克风&#xff0c;它们不仅在音质上表现出色&#xff0c;更在设计和性能上各有千秋。这些麦克风不仅适合专业录音师使用&#xff0c;也适合普通用户在日常生活中的各种场…

【LeetCode】42.接雨水

接雨水 题目描述&#xff1a; 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图&#xff0c;计算按此排列的柱子&#xff0c;下雨之后能接多少雨水。 示例 1&#xff1a; 输入&#xff1a;height [0,1,0,2,1,0,1,3,2,1,2,1] 输出&#xff1a;6 解释&#xff1a;上面是由数…

某铁路信息中心运营监测项目

某铁路信息中心承担大量实时监测、例行巡检和排障维护等工作&#xff0c;为巩固信息化建设成果&#xff0c;提高整体运维效果&#xff0c;保障铁路信息系统稳定运行&#xff0c;需对现有网络监测系统进行升级改造。 设备类型&#xff1a;服务器、交换机、数据库、中间件、虚拟…

js时间换算

1、根据HH::mm:ss以及提前或延迟的分钟数得出具体时间及偏移量 timeString格式为HH:mm:ss&#xff1b;minutesOffset有正负&#xff0c;正代表延后&#xff0c;负代表提前&#xff1b;返回值中dayOffset表示偏移量&#xff0c;0表示当天&#xff0c;1表示次日&#xff0c;-1表…

【数据结构】树与二叉树——二叉树的概念

二叉树的概念 导读一、二叉树的定义及其主要特性1.1 二叉树的定义1.2 二叉树的主要特性 二、特殊的二叉树2.1 满二叉树2.2 完全二叉树2.3 二叉排序树2.4 平衡二叉树 三、二叉树的性质3.1 性质一3.2 性质二3.3 性质三3.4 性质四3.5 性质五 结语 导读 大家好&#xff0c;很高兴又…