程序员怎能不会“中介者模式”,请耗子尾汁

PJzhang:左耳朵耗子-陈皓 猫宁!!! 参考链接:https://coolshell.cn/haoel 左耳朵耗子原名陈皓,那个是他的网络ID,在我眼中是个值得尊敬的程序员,虽然我对他真人没什么了解。 这是他博客的自我介绍: 20年软件开发相关工作经验,10年以上项目和团队管理经验。擅长底层技术架构,团队建设,软件工程,软件研发咨询,以及全球软件团队协作管理。对高性能,高可用性,分布式,高并发,以及大规模数据处... 阅读详情

今天让我们一起来了解一下中介者模式,希望通过本文的讲解大家可以更加深入的理解该模式。

基本介绍

中介者模式属于行为型设计模式的一种。

该模式的核心思想是:通过一个中介类来封装一系列的对象交互,让各对象之间不需要显示的相互引用,从而促使对象间的耦合度降低。

举个栗子

小明想要租房,他比较笨采用最原始的方法走街串巷找寻最合适的房子。

在这里插入图片描述

经过一番周转,费了九牛二虎之力租到了合适的房子(不使用中介者模式)。

菜鸟也想要租房子,不过菜鸟聪明啊肯定不会自己瞎转,直接找到了中介。

在这里插入图片描述

通过中介,轻松搞定租房问题。这就是中介者模式的体现,中介类负责封装其它类,并与其进行交互。

中介者模式UML类图

在这里插入图片描述

UML类图讲解

Mediator:抽象中介者,定义了注册同事对象和与同事对象交互的方法。
ConcreteMediator:具体中介者,实现了抽象中介者中定义的方法。定义了集合用于管理同事对象。
Colleague:抽象同事类,聚合了抽象中介者对象。定义了所有具体同事类所需的公共方法。
ConcreteColleagueA/B:具体同事类,实现了抽象类中定义的方法。

案例讲解

案例:通过找中介租房的例子来讲解一下中介者模式。

房主 => 对应抽象同事类

public abstract class Homeowner {

  // 聚合中介者
  private Mediator mediator;

  public Homeowner(Mediator mediator) {
    this.mediator = mediator;
  }

  public abstract void signContract();

  public Mediator getMediator() {
    return mediator;
  }

}

具体同事类

/**
 * 地下室
 */
public class BasementHomeowner extends Homeowner {

  // 构造方法
  public BasementHomeowner(Mediator mediator) {
    super(mediator);
    this.getMediator().Register("地下室", this);
  }

  @Override
  public void signContract() {
    System.out.println("欢迎入住地下室,每月仅需500元!");
  }
}

/**
 * 别墅
 */
public class VillaHomeowner extends Homeowner {

  public VillaHomeowner(Mediator mediator) {
    super(mediator);
    this.getMediator().Register("别墅", this);
  }

  @Override
  public void signContract() {
    System.out.println("欢迎入住豪华别墅,每月只要5000元!");
  }
}

抽象中介者

public interface Mediator {

  // 注册同事对象
  void Register(String name, Homeowner homeowner);

  // 接收消息
  void receiveMessage(int price);
}

具体中介者

public class ConcreteMediator implements Mediator {

  private HashMap<String, Homeowner> homeownerMap;

  public ConcreteMediator() {
    this.homeownerMap = new HashMap<>();
  }

  @Override
  public void Register(String name, Homeowner homeowner) {
    homeownerMap.put(name, homeowner);
  }

  @Override
  public void receiveMessage(int price) {
    switch (price) {
      case 500:
        homeownerMap.get("地下室").signContract();
        break;
      case 5000:
        homeownerMap.get("别墅").signContract();
        break;
      default:
        System.out.println("没有你想要的房源,去别家看看吧!");
        break;
    }
  }
}

客户端测试类

public class Client {

  public static void main(String[] args) {
    // 创建中介者
    ConcreteMediator concreteMediator = new ConcreteMediator();

    // 创建具体房主
    BasementHomeowner basementHomeowner = new BasementHomeowner(concreteMediator);
    VillaHomeowner villaHomeowner = new VillaHomeowner(concreteMediator);

    concreteMediator.receiveMessage(5000);
  }
}

执行结果

在这里插入图片描述

总结

1、使用中介者模式可以将类之间多对多的关系转变成一对多的关系,降低类的复杂度。

2、中介者模式可以减少类之间的依赖、降低耦合度。

3、中介者类在该模式中承担的责任比较多,一旦出错整个系统都会受到影响。

4、中介者类会随着同事类的增多和业务的复杂而变得庞大,从而提升维护的难度。

今天的分享就到这里了,如果感觉“菜鸟”写的文章还不错,记得点赞加关注呦!你们的支持就是我坚持下去的动力。文章哪里写的有问题的也希望大家可以指出,我会虚心受教。
在这里插入图片描述

西门子S7-200 SMART PLC控制伺服电机 以下是使用西门子S7-200 SMART PLC控制伺服电机的详细程序框架和配置说明,涵盖硬件接线、PLC配置和基本运动控制逻辑。具体实现需根据伺服电机型号(如松下、三菱、台达等)调整参数。通过以上步骤,可实现伺服电机的基础位置控制。实际应用需根据设备机械参数和伺服驱动器手册调整细节。建议在调试时逐步测试脉冲输出和方向信号是否正常。 阅读详情

相关推荐

【项目管理】第8章 项目整合管理 --知识点整理

制定项目章程: 第一步,旨在明确项目的目标、范围、关键里程碑等关键信息,为项目的后续工作奠定基础。制订项目管理计划: 在项目章程的基础上,进一步详细规划项目的执行过程,包括时间、成本、质量、风险等方面的管理计划。指导与管理项目执行: 按照项目管理计划执行项目,同时监控项目的进展,确保项目按照计划进行。监控项目工作: 对项目的执行情况进行持续监控,及时发现并解决问题,确保项目目标的实现。

weixin_42081167的博客 1594

Java设计模式-中介者模式

19、中介者模式 中介模式的设计思想跟中间层很像,通过引⼊中介这个中间层,将⼀组对象之间的交互关系 (或者依赖关系)从多对多(⽹状关系)转换为⼀对多(星状关系)。原来⼀个对象要跟 n 个对象交互,现在只需要跟⼀个中介对象交互,从⽽最⼩化对象之间的交互关系,降低了代码 的复杂度,提⾼了代码的可读性和可维护性。 UML类图: **抽象中介者:**定义了各个同事之间交互需要的方法。 **具体中介者:**需要了解维护各个同事对象,并且负责协调各个具体同事之间的交互。 **抽象同事类:**约束具体同事类的类型、并且

weixin_41804870的博客 254

MAX30102传感器实战:从寄存器配置到Arduino心率血氧监测

本文详细介绍了MAX30102传感器在Arduino平台上的实战应用,从寄存器配置到心率血氧监测的全过程。通过清晰的代码示例和实用技巧,帮助开发者快速实现脉搏血氧仪功能,包括I2C通信、FIFO数据处理及算法实现,适用于健康监测和可穿戴设备开发。

weixin_29182481的博客 511

程序员接私活一定要知道的事情,我走的弯路你们都别走了

全是经验啊!这些年我一直都有做私活,尤其是这两年闲在家里不去工作,所以接单更是频繁很多。担心遇到不良甲方,项目做完了不给结款担心花了钱去开网站的会员好接更多单,结果还是没单。有些中介会冒充甲方,甲方原价8000的项目,中介4000找到你去做,结果他啥也没干,坐收4000…今天我就把我做私活的全部经验分享给大家,希望大家以后接单时能少走一些弯路!接单这个事情真的很正常,靠自己的技术去增加收入的事情不丢人,只是希望我走过的这些弯路,你们不要再走一遍。

libaiup的博客 522

从原理图到代码:深入解析SX1278 LoRa模块与STM32的SPI通信驱动(附完整工程)

本文深入解析了SX1278 LoRa模块与STM32的SPI通信驱动实现,从硬件原理图到完整工程代码,详细介绍了LoRa技术的通信原理、寄存器配置、SPI接口设计及低功耗优化策略。适合物联网开发者和嵌入式工程师提升远距离无线通信能力,附完整工程代码助力快速开发。

weixin_42715608的博客 423

从零到一:如何用YOLOv8和PyQt5打造一个高效的路面坑洞检测系统

本文详细介绍了如何利用YOLOv8和PyQt5开发一个高效的路面坑洞检测系统。从环境配置、数据采集标注到模型训练优化,再到PyQt5界面开发与系统集成,提供了完整的实战指南。该系统结合深度学习技术,显著提升了道路检测的准确性和效率,适用于各类道路维护场景。

weixin_29047919的博客 308

设计模式——中介模式

今天我们来学习最后一个行为型设计模式:中介模式。中介模式也属于不怎么常用的模式,应用场景比较特殊,所以,中介模式也不是学习的重点,稍微了解一下。 概述 中介模式:(Mediator Design Pattern)定义了一个单独的(中介)对象,来封装一组对象之间的交互。将这组对象之间的交互委派给与中介对象交互,来避免对象之间的直接交互。 用来降低多个对象和类之间的通信复杂性。这种模式提供了一个中介类,该类通常处理不同类之间的通信,并支持松耦合,使代码易于维护。 实际上,中介模式的设计思想跟中间层很像,通过引入

zhang33565417的博客 1184

ISCC练习题MISC

解题技巧:看最后括号应该是IceCTF,先用了一键解码啥也没有啊,不对不对!好像是字符频率统计,转换网站:http://quipqiup.com/有人给你发了一串信息,你能解开吗?

m0_62737381的博客 1119

从房产中介到程序员--80后张江男

一个80后程序员、张江男的成长史

zhouyongku的专栏 5615

C/C++ LMS算法详解及源码

LMS(Least Mean Squares)算法是一种自适应滤波器算法,用于估计一个系统的参数,以使输出信号与期望信号之间的均方误差最小化。LMS算法通过使用梯度下降的方法,逐步调整自适应滤波器的权值来优化滤波效果。

希望我的博客,能帮上你解决学习中工作中所遇到的问题 3276

数字电视中的 Closed Caption (CC) 字幕标准协议

本文将详细介绍 DVB中的 CC 字幕标准协议,包括数据结构格式、字段定义、字段占用比特数以及字段用途。此外,本文还将举例说明如何从 TS 传输流中解析 CC 字幕信息,并组织打包到电视节目中进行显示。

以实战经验介绍行业知识 670

程序员一般通过什么途径接私活?怎样搞兼职

程序员一般通过什么途径接私活?怎样搞兼职 目前网上成规模的此类服务平台模式主要集中在『项目众包』『人才雇佣』『威客竞标』『解决方案』『技术入股』 几个方面     程序员客栈应该是业内当下做得最扎实的中高端程序员人才共享工作平台。我们从『程序员质量』、『标准建设』、『工作保障体系』几大块在入手做建设。从服务质量,程序员数量品质来看程序员客栈目前都是业内最优,并且是领先一个量级。  

ios+Android移动应用开发交流群:634921710 1万+

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

我劝debug,程序员,耗子尾汁

参数 =address 指定当前在内存中要开始执行的程序地址。如果不指定address,Windows2000将从CS:IP寄存器中的当前地址开始执行程序。 breakpoints 指定可以设置为g命令的部分的1到10个临时断点。 有关执行循环、重复的字符串指令、软件中断或子程序的信息,请单击“相关主题”列表中的DebugP(执行)。 有关执行指令的信息,请单击“相关主题”列表中的DebugT(跟踪)。 范例 假定键入以下命令: gcs:7550 Windows...

weixin_44935794的博客 202

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

不会编程,哪怕进“985”“211”,我也劝你耗子尾汁

大多数同学,刚进入大学都需要休整一段时间,因为高中太辛苦了,每天早起晚睡,各种诊断和模拟考试,进入大学后,除了军训外,课更少了,空余时间多了,老师也不再像高中那样天天监督你了,离毕业和就业也还遥远,所以,你开始了你的舒适圈,并且说着明天开始改变的废话。 大一你不敢旷课,但是你会不听课,喜欢划水,因为你可以吃一段时间的老本,高中的知识可以支撑你一段时间,可是你的懒散便一发不可收拾:游戏,逛街,看电影.....直到你大一结束。 大二你继承着大一的优良传统,保持着你的坏习惯,但是你已经对外界不感兴趣了,经过一

m0_59418120的博客 376

纪念左耳朵耗子(陈皓)

R.I.P

优快云资讯 5万+

R.I.P,又一位程序员巨佬——左耳朵耗子陨落

耗子叔在某推上也非常活跃,发表过 6000+ 篇推文,有 13 万关注者,因为某推如果长时间不登录的话会自动注销,所以有推友把他的内容全部导出到 GitHub 上了。左耳朵耗子,在程序员这个群体里应该属于 GOAT 的存在了,虽然每个人心目中都有自己的 GOAT,但耗子叔的影响力可以说是有目共睹。鉴于此,我整理了一份耗子叔网站上阅读最好的 10 篇文章,也算是留个纪念吧,希望他的友人能帮忙把他的网站续费下去。所以,一定要注意身体锻炼,我自己平常上班就骑的自行车,就是希望通过骑自行车来锻炼一下身体。

沉默王二 8897

谁是左耳朵耗子?

小灰一直觉得,想要变得牛逼,要尽可能跟有思想的大牛们多学习。前一段时间,小灰为了聆听国际软件开发巨匠Martin Fowler的分享,就特意从北京飞到了深圳。除了Mart...

程序员小灰的博客 7470

耗子叔也曾是我榜样!

阅读本文大概需要 2.9 分钟。我以前写程序的时候,其实深受业内某些大神的影响,耗子叔就是其中之一。对了,耗子叔就是陈皓,网名左耳朵耗子,我习惯称呼他为耗子叔,他是个有着 20 年以上的...

stormzhang的专栏 1536

Vue2和Vue3使用上的区别在这,耗子尾汁!

点击上方“程序员黑叔”,选择“置顶或者星标”你的关注意义重大!作者:王立发https://zhuanlan.zhihu.com/p/267040951Vue 3 的 Template 支...

weixin_46837985的博客 3664

老程序员去面试,技术水平还不如应届生!年轻人耗子尾汁

之前有读者留言:“觉得很悲哀,面试BAT某大厂,发现回答底层原理都是刚毕业时学习到的,在某大厂的这几年,忙的累死,业务开发,也根本没时间深入研究什么东西...不知道该咋办,做的业务属于自娱自乐型,进退维谷!” 其实有很多读者都有类似疑惑,尤其随着行业饱和,工作越来越难,技术提升确实困扰着很多程序员。就说今年疫情的原因吧,大家对工作的焦虑也变严重了很多,尤其那些年前就想跳槽或者已经裸辞的,对于年后的机会观望也拉长了战线。 作为一个资深老程序员,我之前也遇到过类似困境,今天就跟大家简单分享一些我的个人经

致力于C语言C++知识分享! 355

不会吧不会吧,都2021年了,不会你还不知道这4种白盒测试方法吗?我劝你耗子尾汁,赶紧来

目录 前言: 一、白盒测试基本概念 1、白盒测试的定义 2、白盒测试的测试对象 3、白盒测试的原则 4、白盒测试的分类 二、静态白盒测试 1、代码检查法 2、静态结构分析法 三、动态白盒测试 1、逻辑覆盖法 2、基本路径测试法 四、写在最后 前言: 黑盒测试又称为功能测试、数据驱动测试或基于规格说明书的测试,是一种从用户观点出发的测试。测试人员一般把被测程序当作一个黑盒子。   黑盒测试主要测到的错误类型有:不正确或遗漏的功能;接口、界面错误;性能错误;数据结构...

丁鱼教育官方博客 1298

字节总监的开发手记,你们耗子尾汁!

如果说这世界上有一种痛,就是程序员找资料的痛,之前经常在各大论坛网站扒资料,但是都是一些零零散散的东西,这几日逛论坛,突然发现了这份“宝藏”,果断花钱买了下来,看完后,卧槽!这钱花的真值...

程序员闪充宝 160

『软件测试4』耗子尾汁!2021年了,你还不知道这4种白盒测试方法吗?

软件测试——详解白盒测试基本概念,四种白盒测试方法一、白盒测试基本概念1、白盒测试的定义2、白盒测试的测试对象3、白盒测试的原则4、白盒测试的分类二、静态白盒测试1、代码检查法(1)代码审查的定义(2)代码审查的目的(3)代码审查的方法(4)代码检查规则(5)代码检查项目2、静态结构分析法(1)定义(2)目的(3)静态结构分析的两种方法三、动态白盒测试1、逻辑覆盖法(1)定义(2)6种逻辑覆盖方法1)语句覆盖(SC)2)判定覆盖(DC)3)条件覆盖(CC)4)判定-条件覆盖(CDC)5)条件组合覆盖(MCC

moandaylab 5899

内卷人,你不学Python,耗子尾汁吧!!!

内卷压力不堪重负,被迫学习Python?只知道迷迷糊糊的学,不知道Python该怎么应用于实际项目?Python到底适不适合你?一起看下去吧! 某天,和学汉语言的同学聊天偶然听说Python是他们的必修课,说要用来做文本分析。 (我一脸震惊,都成必修课啦 ) 接着我又在朋友圈里看到学新闻的同学开始卖Python爬虫的书。 接着我发现金融的同学也学Python,农业的同学也在学Python,连已经工作的亲戚也来咨询我Python数据分析的问题。...

qq_40433634的博客 291

UDP ,你要耗子喂汁呀!

点击上方蓝色小字,关注“涛哥聊Python”重磅干货,第一时间送达来源:程序员cxuan运输层位于应用层和网络层之间,是 OSI 分层体系中的第四层,同时也是网络体系结构的重要部分。运输...

涛哥聊Python 414
上一篇: 升职加薪必备技能:设计模式之——观察者模式
下一篇: 作为一位即将单独负责项目的菜鸟来谈谈他的心里话
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值