当前位置: 首页 > news >正文

【Java设计模式】十九、中介者模式

文章目录

  • 1、中介者模式
  • 2、案例
  • 3、总结

1、中介者模式

如图:

在这里插入图片描述

同事类之间关联较多时,整体出现网状结构,耦合度极高。一个对象一变动,好多对象都得改。若变为右边的星形结构,则一个类的变动,只影响自身与中介者类。右边即中介者模式:定义一个中介角色来封装一系列对象之间的交互,使原对象之间解耦合。

不要把所有的对象关系处理逻辑封装在本类中,而是使用一个专门的类来管理那些不属于自己的行为

在这里插入图片描述

中介者模式的角色:

  • 抽象中介者:中介者的接口,提供同事对象注册(房东怎么向中介同步房源信息)、转发同事对象信息(房东和租房者的沟通)的抽象方法
  • 具体中介者:实现类,可定义List管理同事对象
  • 抽象同事类:提供同事对象交互的抽象方法
  • 具体同事类:实现类,需要与其他同事对象交互时,由中介对象负责传达

2、案例

房主将房子托管给中介,租房者找中介租房。房主和租房者属于同事类。

在这里插入图片描述

先定义抽象中介者,提供一个同事对象之间沟通的方法:

//抽象中介者
public abstract class Mediator {//申明一个联络方法public abstract void constact(String message,Person person);
}

定义抽象同事类,聚合抽象中介者:

//抽象同事类
public abstract class Person {protected String name;  //名字protected Mediator mediator;  //中介public Person(String name,Mediator mediator){this.name = name;this.mediator = mediator;}
}

定义具体同事类:租客

//具体同事类 承租人
public class Tenant extends Person {public Tenant(String name, Mediator mediator) {super(name, mediator);}//与中介者联系public void constact(String message){mediator.constact(message, this); }//获取信息public void getMessage(String message){System.out.println("租房者" + thhis.name +"获取到的信息:" + message);}
}

定义具体同事类:房主

//具体同事类 房屋拥有者
public class HouseOwner extends Person {public HouseOwner(String name, Mediator mediator) {super(name, mediator);}//与中介者联系public void constact(String message){mediator.constact(message, this);}//获取信息public void getMessage(String message){System.out.println("房主" + name +"获取到的信息:" + message);}
}

定义具体中介者,聚合同事类

//中介机构
public class MediatorStructure extends Mediator {//首先中介结构必须知道所有房主和租房者的信息private HouseOwner houseOwner;private Tenant tenant;public HouseOwner getHouseOwner() {return houseOwner;}public void setHouseOwner(HouseOwner houseOwner) {this.houseOwner = houseOwner;}public Tenant getTenant() {return tenant;}public void setTenant(Tenant tenant) {this.tenant = tenant;}//中介去完成信息的交互public void constact(String message, Person person) {if (person == houseOwner) {          //如果是房主,则租房者获得信息tenant.getMessage(message);} else {       //反正则是房主获得信息houseOwner.getMessage(message);}}
}

写测试类:

//测试类
public class Client {public static void main(String[] args) {//一个房主、一个租房者、一个中介机构MediatorStructure mediator = new MediatorStructure();//房主和租房者只需要知道中介机构即可HouseOwner houseOwner = new HouseOwner("张三", mediator);Tenant tenant = new Tenant("李四", mediator);//中介结构要知道房主和租房者mediator.setHouseOwner(houseOwner);mediator.setTenant(tenant);tenant.constact("我要租三室的房子");houseOwner.constact("我这有三室的房子,帮我问问有人需要租吗?");}
}

运行:

在这里插入图片描述

3、总结

松散耦合,在中介者对象这里集中控制同事对象的交互。但当同事类太多时,中介者类会复杂而庞大。

相关文章:

【Java设计模式】十九、中介者模式

文章目录 1、中介者模式2、案例3、总结 1、中介者模式 如图: 同事类之间关联较多时,整体出现网状结构,耦合度极高。一个对象一变动,好多对象都得改。若变为右边的星形结构,则一个类的变动,只影响自身与中介…...

这个学习Python的神仙网站,后悔没早点发现

Python 作为时下最流行的编程语言,很多初学者都将它作为自学编程的首选。不管是有编程经验的开发者,还是新手小白,在这个 AIGC 时代, Python 都可以带你探索新世界。 入门 Python 绝非难事,但如何让自己坚持学下去是如…...

牛津大学“领域驱动设计”课程

领域驱动设计(“DDD”)是一种专注于系统领域而不是技术的软件设计方法。重点是构建共享的心理模型并以尽可能简单的方式在代码中表示该领域模型。数据库存储、框架等技术细节被认为是设计的次要方面。该模块将重点关注 DDD 和一般设计以及相关主题&#…...

Redisson分布式锁解决方案

官方地址 官网: https://redisson.org github: https://github.com/redisson/redisson 基于setnx实现的分布式锁存在的问题 redisson分布式锁原理 不可重入: 利用hash结构记录线程id和重入次数不可重试: 利用信号量和PubSub功能实现等待、唤醒, 获取锁失败的重试机制超时释放…...

linux命令深入研究——cat

cat命令,“猫”,可以理解为瞄一眼文件内容,其中可以用重定向符号对文件进行一些修改,如增加,删除文件内容,其命令参数如-n,-s,-b可以输出带有行号的行 如果想要快速删除文件内容&…...

代码随想录算法训练营第40天|343. 整数拆分、96.不同的二叉搜索树

343. 整数拆分 题目链接:link 文章讲解:link 视频讲解:link 一、做题感受&第一想法 其实第一反应是回溯……但感觉每层的集合都会很繁琐 二、学习文章后收获 1.动态规划思路 动规五要素分析 dp和i的定义:dp[i]指把i拆分后最…...

二叉树算法

递归序 每个节点都能回到3次! 相当于2执行完然后返回了代码会往下走,来到3节点 小总结: 也就是4节点先来到自己一次,不会执行if,先调用自己左边的那个函数,但是是null,直接返回。 这个函数执行完了,就会回到自己,调用自己右边的那个函数,结果又是空,又返回,回到…...

【2024年5月备考新增】《软考真题分章练习(答案解析) - 4 项目范围管理(高项)》

点击跳转无答案版 1、() includes the processes required to ensure that the project includes all the work required , and only the work required , to complete the project successfully . Managing the project scope is primarily concerned with defining and con…...

Docker拉取镜像存储不足

在使用Docker时,我们经常遇到一个问题,就是拉取镜像时提示存储空间不足。这是因为Docker在拉取镜像时需要将镜像文件下载到本地存储中,而有时本地存储空间不足以容纳完整的镜像文件。 本文将介绍一些解决这个问题的方法,并提供相…...

JUNIT5+Mockito单元测试

文章目录 1、前言2、Maven依赖2.1 JDK21SpringBoot版本基于3.1.02.2 JDK17SpringBoot版本基于2.2.5.RELEASE 3、业务代码4、单元测试 1、前言 之前写过一篇使用testMe自动生成单元测试用例,使用的是junit4来编写的单元测试用例,目前很多新项目都已经使用…...

【C#】【SAP2000】读取SAP2000中所有Frame对象的应力比到Grasshopper中

if (build true) {// 连接到正在运行的 SAP2000// 使用 System.Runtime.InteropServices.Marshal.GetActiveObject 方法获取正在运行的 SAP2000 实例cOAPI mySapObject (cOAPI)System.Runtime.InteropServices.Marshal.GetActiveObject("CSI.SAP2000.API.SapObject"…...

一台服务器部署两个独立的mysql实例

🍁博主简介: 🏅云计算领域优质创作者 🏅2022年CSDN新星计划python赛道第一名 🏅2022年CSDN原力计划优质作者 🏅阿里云ACE认证高级工程师 🏅阿里云开发者社区专…...

SpringBoot(Lombok + Spring Initailizr + yaml)

1.Lombok 1.基本介绍 2.应用实例 1.pom.xml 引入Lombok&#xff0c;使用版本仲裁 <!--导入springboot父工程--><parent><artifactId>spring-boot-starter-parent</artifactId><groupId>org.springframework.boot</groupId><version&g…...

数据库基础知识超详细解析~‍(进阶/复习版)

文章目录 前言一、数据库的操作1.登入数据库2.创建数据库3.显示当前数据库4.使用数据库5.删除数据库 二、常用数据类型三、数据库的约束1约束类型2NULL约束3UNIQUE:唯一约束4DEFAULT&#xff1a;默认值约束5 PRIMARY KEY&#xff1a;主键约束6 FOREIGN KEY&#xff1a;外键约束…...

创建对象的方法有哪些

创建对象的方法主要取决于你使用的编程语言和上下文。下面我将列出一些主流编程语言中创建对象的方法&#xff1a; Python: 使用类定义和__init__方法&#xff1a; pythonclass MyClass: def __init__(self, name): self.name nameobj MyClass("Alice") 1.使用工厂…...

Oracle 10g字符编码

pl/sql developer查询数据时出现乱码&#xff0c;主要检查如下&#xff1a; 1、检查服务器编码 select * from v$nls_parameters;select * from nls_database_parameters;select userenv(language) from dual; 2、查看数据库可用字符集参数设置 select * from v$nls_valid_val…...

掌握抽象基础之20个必备原则,看完你还不会,你打我

抽象基础之20个必备原则 1. 面向对象编程&#xff08;OOP&#xff09;中抽象原则背后的基本思想是什么&#xff1f;2.抽象和封装的区别&#xff1f;3.提供一个现实生活中说明抽象的例子4.在编程语言中如何实现抽象&#xff1f;5.定义抽象类6.提供一个抽象类的真实世界场景7.解释…...

设计模式 -- 2:策略模式

目录 总结部分&#xff1a;策略模式的优点部分代码部分 总结部分&#xff1a; 策略模式和简单工厂模式很像 区别在于 简单工厂模式 需求的是由工程创造的类 去给客户直接答案 而策略模式在于 我有主体 一个主体 根据策略的不同来进行不同的计算 我的主体就负责收钱 然后调度相…...

【快速上手ProtoBuf】proto 3 语法详解

1 &#x1f351;字段规则&#x1f351; 消息的字段可以⽤下⾯⼏种规则来修饰&#xff1a; singular &#xff1a;消息中可以包含该字段零次或⼀次&#xff08;不超过⼀次&#xff09;。 proto3 语法中&#xff0c;字段默认使⽤该规则。repeated &#xff1a;消息中可以包含该…...

人工智能的幽默“失误”

人工智能迷惑行为大赏 随着ChatGPT热度的攀升&#xff0c;越来越多的公司也相继推出了自己的AI大模型&#xff0c;如文心一言、通义千问等。各大应用也开始内置AI玩法&#xff0c;如抖音的AI特效&#xff5e;在使用过程中往往会遇到一些问题&#xff0c;让你不得不怀疑&#x…...

基于Translategemma-12b-it的跨国电商评论分析系统

基于Translategemma-12b-it的跨国电商评论分析系统 1. 引言 在全球化电商时代&#xff0c;企业面临着来自世界各地用户的多样化反馈。一位日本顾客对产品的赞美、一位德国用户对物流的抱怨、一位巴西消费者对价格的评价——这些多语言评论蕴含着宝贵的市场洞察&#xff0c;但…...

Soundflower:解锁macOS音频路由的神奇工具

Soundflower&#xff1a;解锁macOS音频路由的神奇工具 【免费下载链接】Soundflower MacOS system extension that allows applications to pass audio to other applications. Soundflower works on macOS Catalina. 项目地址: https://gitcode.com/gh_mirrors/so/Soundflow…...

美团外卖省钱终极指南:如何用自动化脚本每月多省200元

美团外卖省钱终极指南&#xff1a;如何用自动化脚本每月多省200元 【免费下载链接】meituan-shenquan 美团 天天神券 地区活动 自动化脚本 项目地址: https://gitcode.com/gh_mirrors/me/meituan-shenquan 还在为美团天天神券抢不到而烦恼吗&#xff1f;还在因为忘记签到…...

如何快速掌握PowerToys中文版:Windows效率提升的终极指南

如何快速掌握PowerToys中文版&#xff1a;Windows效率提升的终极指南 【免费下载链接】PowerToys-CN PowerToys Simplified Chinese Translation 微软增强工具箱 自制汉化 项目地址: https://gitcode.com/gh_mirrors/po/PowerToys-CN 如果你经常在Windows上工作&#xf…...

Qwen3.5-9B-AWQ-4bit与Claude对比评测:开源与闭源模型的技术选型

Qwen3.5-9B-AWQ-4bit与Claude对比评测&#xff1a;开源与闭源模型的技术选型 1. 评测背景与目标 在AI大模型领域&#xff0c;开源与闭源模型的选择一直是开发者面临的重要决策。本次评测聚焦于两款在开发者社区中备受关注的模型&#xff1a;开源的Qwen3.5-9B-AWQ-4bit和闭源的…...

城通网盘限速破解终极指南:ctfileGet让你的下载速度提升10倍

城通网盘限速破解终极指南&#xff1a;ctfileGet让你的下载速度提升10倍 【免费下载链接】ctfileGet 获取城通网盘一次性直连地址 项目地址: https://gitcode.com/gh_mirrors/ct/ctfileGet 在数字信息时代&#xff0c;城通网盘作为国内流行的文件分享平台&#xff0c;却…...

OmenSuperHub:重新定义游戏本性能控制的开源解决方案

OmenSuperHub&#xff1a;重新定义游戏本性能控制的开源解决方案 【免费下载链接】OmenSuperHub 使用 WMI BIOS控制性能和风扇速度&#xff0c;自动解除DB功耗限制。 项目地址: https://gitcode.com/gh_mirrors/om/OmenSuperHub 痛点解析&#xff1a;你的游戏本是否正遭…...

Unity URP描边效果:5分钟为游戏角色添加专业轮廓

Unity URP描边效果&#xff1a;5分钟为游戏角色添加专业轮廓 【免费下载链接】Unity-URP-Outlines A custom renderer feature for screen space outlines 项目地址: https://gitcode.com/gh_mirrors/un/Unity-URP-Outlines Unity URP Outlines 是一款专为Unity Univers…...

圣女司幼幽-造相Z-Turbo效果展示:澄澈苍穹背景的渐变色阶与大气散射光学效果还原

圣女司幼幽-造相Z-Turbo效果展示&#xff1a;澄澈苍穹背景的渐变色阶与大气散射光学效果还原 圣女司幼幽-造相Z-Turbo是基于Z-Image-Turbo的Lora版本模型&#xff0c;专门用于生成《牧神记》中圣女司幼幽的高质量图像。本文将展示该模型在还原澄澈苍穹背景的渐变色阶与大气散射…...

在ABAQUS中用SPH模拟倒酒过程,超有趣的小探索

ABAQUS模拟倒酒过程&#xff0c;酒用sph模拟最近在玩ABAQUS&#xff0c;突发奇想试试模拟倒酒过程&#xff0c;酒用SPH&#xff08;光滑粒子流体动力学&#xff09;方法来模拟&#xff0c;那效果简直绝了&#xff0c;跟大家分享分享我的折腾经历。 为啥选SPH模拟酒&#xff1f;…...