【Java中23种面试常考的设计模式之中介者模式(Mediator)---行为型模式】

JAVA的22种设计模式 java设计模式集大成--易理解!慢慢积累追加笔记。 阅读详情

【Java中23种面试常考的设计模式之中介者模式(Mediator)—行为型模式】

知识回顾:

之前我们讲过的设计模式在这里呦:
【面试最常见的设计模式之单例模式】
【面试最常见的设计模式之工厂模式】
【Java中23种面试常考的设计模式之备忘录模式(Memento)—行为型模式】
【Java中23种面试常考的设计模式之观察者模式(Observer)—行为型模式】
【Java中23种面试常考的设计模式之模板模式(Template)—行为型模式】
【Java中23种面试常考的设计模式之状态模式(State)—行为型模式】
【Java中23种面试常考的设计模式之策略模式(Strategy)—行为型模式】
【Java中23种面试常考的设计模式之迭代器模式(Iterator)—行为型模式】
【Java中23种面试常考的设计模式之访问者模式(Visitor)—行为型模式】
接下来我们要进行学习的是:【Java中23种面试常考的设计模式之中介者模式(Mediator)—行为型模式】。

中介者模式

中介者模式:用来降低多个对象和类之间的通信复杂性。这种模式提供了一个中介类,该类通常处理不同类之间的通信,并支持松耦合,使代码易于维护。

解决的问题

  1. 对象与对象之间存在大量的关联关系,这样势必会导致系统的结构变得很复杂。
  2. 因为对象之前存在着复杂的关系,牵一发而动全身,所以我们需要抽离出来一个中介者类来对其它类进行灵活的调节。
  3. 如果一个系统中对象之间的联系呈现为网状结构,对象之间存在大量多对多关系,将导致关系及其复杂,这些对象称为"同事对象",我们可以引入一个中介者对象,使各个同事对象只跟中介者对象打交道,将复杂的网络结构化解为星型结构。

生产开发中常用的使用场景

  1. MVC 框架,其中C(控制器)就是 M(模型)和 V(视图)的中介者。

中介者模式优点与缺点

优点
  1. 降低了类的复杂度,将一对多转化成了一对一。
  2. 各个类之间的解耦。
  3. 符合迪米特原则。
缺点
  1. 中介者会庞大,变得复杂难以维护。

核心角色

Mediator 中介者接口、ConcreteMediator 中介者实现、Colleague同事类接口、ConcreteColleague同事实现类、客户端测试。

UML类图

在这里插入图片描述

实现代码

我们实现这样一个栗子:假设A、B、C同事分别负责不同的开发任务,如果没人领导他们,或者说没人给他们分发任务,他们在开发中就会存在一些冲突,这就需要一个中介者(领导者)对他们进行协调。

Mediator 中介者接口
package com.mediator;

public interface Mediator {
	
	void register(String cname,Colleague colleague);
	
	void command(String cname);
}
ConcreteMediator 中介者实现
package com.mediator;

import java.util.HashMap;
import java.util.Map;

public class ConcreteMediator  implements Mediator {
	
	private Map<String,Colleague> map = new HashMap<String , Colleague>();
	
	@Override
	public void command(String cname) {
		map.get(cname).develop();
	}

	@Override
	public void register(String cname, Colleague colleague) {
		map.put(cname, colleague);
	}
}
Colleague同事类接口
package com.mediator;

public interface Colleague {
	void develop(); //做自己负责的功能模块
	void report();  //向项目领导者汇报工作
}
ConcreteColleagueA同事实现类
package com.mediator;

public class ConcreteColleagueA implements Colleague {

	private Mediator m;  //持有中介者的引用
	
	public ConcreteColleagueA(Mediator m) {
		super();
		this.m = m;
		m.register("A", this);
	}

	@Override
	public void report() {
		System.out.println("我是A!我要汇报工作!");
		m.command("A");
	}

	@Override
	public void develop() {
		System.out.println("我是A,我负责前端功能开发!");
	}
}
ConcreteColleagueB同事实现类
package com.mediator;

public class ConcreteColleagueB implements Colleague {

	private Mediator m;  //持有中介者引用
	
	public ConcreteColleagueB(Mediator m) {
		super();
		this.m = m;
		m.register("B", this);
	}

	@Override
	public void report() {
		System.out.println("我是B!我要汇报工作!");
		m.command("B");
		
	}

	@Override
	public void develop() {
		System.out.println("我是B,我负责后端功能开发!");
	}
}
ConcreteColleagueC同事实现类
package com.mediator;

public class ConcreteColleagueC implements Colleague {

	private Mediator m;  //持有中介者的引用
	
	public ConcreteColleagueC(Mediator m) {
		super();
		this.m = m;
		m.register("C", this);
	}

	@Override
	public void report() {
		System.out.println("我是C!我要汇报工作!");
		m.command("C");
	}

	@Override
	public void develop() {
		System.out.println("我是C,我负责数据库设计!");
	}
}
客户端测试代码Client-Main
package com.mediator;

public class Main {
    public static void main(String[] args) {
		// 获取中介者对象
		Mediator m = new ConcreteMediator();
		// 获取同事对象,实例化的时候会在中介者对象中注册
		ConcreteColleagueA   colleagueA = new ConcreteColleagueA(m);
		ConcreteColleagueB   colleagueB = new ConcreteColleagueB(m);
        ConcreteColleagueC   colleagueC = new ConcreteColleagueC(m);
		
		
		colleagueA.report();

        colleagueB.report();

        colleagueC.report();
	}

}

运行结果展示:

在这里插入图片描述

好了,到这里【Java中23种面试常考的设计模式之中介者模式(Mediator)—行为型模式】就结束了,23种设计模式持续更新汇总中。

利用大规模生物活性挖掘,计算识别针对癌基因驱动蛋白 EGFR、BRAF 与 CDK4 的高亲和力抑制剂 背景:精准癌症治疗需要小分子抑制剂与致瘤蛋白靶点之间的精确匹配。方法:我们使用 Python 及 ChEMBL 数据库 API 开发了一套计算流程,系统性地筛选针对 EGFR、BRAF 与 CDK4 的高亲和力配体。对 IC50 < 1000 nM 的生物活性进行过滤,并检索候选化合物的分子结构(SMILES)以供后续优化。结果:本研究共识别出 [插入总数] 种独特化合物。其中,对 BRAF 激酶而言,我们挑选了一批 IC50 低至 6.0 nM 的高效实验性化合物。 阅读详情

相关推荐

服务器AutoDL自己部署QWen3

说明:核心参数:30B 模型原精度权重文件约 60GB,单张 PRO 6000 拥有 48GB 显存,单卡塞不下原精度模型,2张 PRO 6000 = 96GB 总显存,这不仅能装下模型,还能留出约 30GB 显存给 KV Cache(上下文长度) 以及 Omni 多模态组件 处理图片/视频输入时的额外开销。1. 前提准备模型选择:直接下载到 AutoDL 服务器上=》原精度模型(BF16/FP16) 的 Qwen3-Omni-30B,选择的示例和环境如下。# 3. 正式执行模型下载。

xiaoxiao_00001的博客 416

Java 23 种设计模式:从踩坑到精通 —— 开篇及系列介绍

摘要:本文是《Java 23种设计模式:从踩坑到精通》系列的总入口与导航页。文章梳理了设计模式的起源与三大分类,结合SOLID六大原则,详解为什么2026年设计模式依然重要。提供25篇完整目录、面试高频Top10速记、场景速查索引、易混模式对比表及分级阅读路线,可作为长期收藏的设计模式学习手册。

折哥|智能物流与Java实战,副高数据库工程师。深耕出版社物流WMS/OMS(线体/立库/VGA),也分享Java进阶与OMS电商对接。Oracle→PG实战派。相信沉淀可迁移能力,分享通用技术,不藏不虚。 3587

深入解析UDS 0x19服务:DTC状态掩码与故障诊断实战

本文深入解析了UDS诊断协议中的核心0x19服务(ReadDTCInformation),重点拆解了DTC状态掩码(DTCStatusMask)的八个状态位及其在故障生命周期中的联动逻辑。通过实战案例,详细说明了从故障发生、确认到清除的全过程,并介绍了如何利用该服务进行深度诊断,包括读取扩展数据(如冻结帧)和避免常见开发误区,是理解汽车ECU故障管理机制的关键。

weixin_29248313的博客 323

java mediator_中介者模式(Mediator)_java实现

中介者模式(Mediator)_java实现//20210129写在前面:刚期末考试完,考了面向对象,里边儿有23个设计模式,我寻思着考完挨个儿实现一下,本文实现命令模式中介者模式核心思想设置一个中介者,来通信所有相关的类举例:MVC模型,Controller(C)是Model(M)和View(V)的中介,负责通信二者,解读消息程序源代码:这里为了方便理解,实现了一个美国、伊拉克通过中介(联合国安...

weixin_36246453的博客 128

数据结构与算法 —— 最短路径Dijkstra算法(迪杰斯特拉)详细图解以及python实现

前两章我们讲到了关于图的基本知识,和广度/深度优先搜索。本章,我们将介绍加权图和最短路径的相关知识。最短路径和最小生成树是图论中常见的问题。最短路径是指在一个图中找到两个节点之间的最短路径,最小生成树是指在一个图中找到一个连通子图,使得所有节点都能够互相到达,且总权值最小。最短路径算法常见的有floyd算法(弗洛伊德算法)和 dijkstra算法(迪杰斯特拉)。本文只介绍dijkstra算法。最短路径运用非常广泛,比如在导航系统中,确定两个地点间哪条路线最短;

‘’ 2万+

GD32测量pwm波频率以及占空比

1、需求 最近做的一个项目,其中有一个传感器输出是pwm波形,频率代表速度,频率越高速度越快。不同的占空比代表不同的故障类型。占空比10%~90%,频率范围20hz ~1khz。 基于以上的需求,单片机要实现两个功能: 1、测量频率 2、测量占空比 这怎么玩呢?从没搞过啊。 2、需求分析 经过查找资料以及参考正点原子的教程,发现单片机的定时器的输入捕获功能能够实现该功能。 2.1分析 如上图所示,测量占空比和测量频率实际上就是测量波形的长度。 对于占空比,就是测量T2与T1时刻的差值 对于频率,就是测量T

Jack Yi的博客 9071

Java 23 种设计模式:从踩坑到精通 | 中介者模式 —— 对象关系太乱?请一位“中间人”

摘要:当多个对象之间形成复杂的网状交互时,直接相互引用会导致“牵一发而动全身”的维护灾难。中介者模式通过引入一个中间协调对象,将所有交互逻辑集中管控,让原本互相引用的对象只与中介者通信,从而将“多对多”转为“一对多”。本文从智能家居设备联动的场景出发,完整讲解中介者模式的原理、UML、代码实现,与外观模式进行深度对比,并结合 Spring MVC DispatcherServlet、消息中间件、微服务注册中心等框架应用,帮你掌握“化网为星”的设计精髓。

折哥|智能物流与Java实战,副高数据库工程师。深耕出版社物流WMS/OMS(线体/立库/VGA),也分享Java进阶与OMS电商对接。Oracle→PG实战派。相信沉淀可迁移能力,分享通用技术,不藏不虚。 944

人工智能技术基础系列之:迁移学习

作者:禅与计算机程序设计艺术 1.背景介绍 随着深度学习和神经网络的快速发展,越来越多的应用场景需要处理大量的数据和复杂的任务。然而,由于计算资源、存储空间等条件的限制,传统的人工智能方法往往不能满足实际需求。因此,为了提高效率和降低成本,研究人员提出了迁移学习的概念。本篇文章将详细介绍迁移学习的基

AI天才研究院 699

《JAVA面经实录》- 23种设计模式面试题(二)

《JAVA设计模式面试精要》摘要:本文系统解析23种设计模式,分为创建型(单例、工厂等)、结构型(适配器、代理等)和行为型(观察者、策略等)三大类。重点阐述六大设计原则(SOLID+迪米特法则),每个模式均包含定义、原则应用、优缺点分析及典型业务场景(如电商支付、审批系统等),并附Java代码实现。特别强调模式选择需结合实际需求,避免过度设计,同时提供清晰的模式对比表格,帮助开发者快速掌握各模式核心特征与应用场景。

专注 Java 后端开发,分享基础语法、JVM、并发、Spring 全家桶、微服务、分布式、性能优化等实战干货。坚持输出高质量技术笔记,用简单语言讲清复杂原理,助力每一位 Java 开发者稳步进阶。 894

路由三大分类:直连路由、静态路由、动态路由

直连路由、静态路由和动态路由各有其独特的特点和适用场景。直连路由适用于简单的直接连接网络,静态路由提供了精确的路径控制,而动态路由则在大型复杂网络中展现出强大的适应性和自动化能力。了解和掌握这三种路由类型的配置和管理,对于网络管理员来说,是确保网络高效、安全运行的重要技能。

网络技术联盟站 4698

数美device_fingerprint、device_id、hmac生成

device_fingerprint、hmac、device_id参数分析与解读

吴秋霖的博客 2881

23个设计模式一文搞懂

本笔记涵盖 23 种经典设计模式,按创建型、结构型、行为型三大类整理。每个模式配有生活类比、核心思想、结构图解、实现要点、真实应用案例、适用场景、优缺点分析及常见面试题。

weixin_72753562的博客 803

第十二段:基于env的重用

现代芯片的验证通常分为两个层次, 一是模块级别( block level, 也称为IP级别、 unit级别) 验证, 二是芯片级别( 也称为SOC级别) 验证。 一个大的芯片在开发时, 是分成多个小的模块来开发的。 每个模块开发一套独立的验证环境, 通常每个模块有 一个专门的验证人员负责。 当在模块级别验证完成后, 需要做整个系统的验证。 假设某个系统分成了三个模块,如下图: 这三个模块在模块级别验证时, 分别有自己的driver和s...

年糕的博客 423

《JAVA面经实录》- SpringBoot 电商项目23种设计模式(三)

最终版·生产级 SpringBoot 电商项目: 已补全所有漏洞 + 23 种设计模式真实串联 + Spring 生态融合 + 可简历可面试可上线

专注 Java 后端开发,分享基础语法、JVM、并发、Spring 全家桶、微服务、分布式、性能优化等实战干货。坚持输出高质量技术笔记,用简单语言讲清复杂原理,助力每一位 Java 开发者稳步进阶。 556

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

23种设计模式之python实现--中介者模式

刚居然接到大众点评的电面了,20多天没一点消息,一下子接到电话一点准备也没有,唉,结果8分钟就把我挂了。还是继续写我的设计模式吧,这几天貌似脑袋进浆糊了,yi

天恒の永恒 1253

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

java面试 之设计模式

设计模式主要分三个类型:创建型、结构型和行为型。 其中创建型有: 一、Singleton,单例模式:保证一个类只有一个实例,并提供一个访问它的全局访问点 二、Abstract Factory,抽象工厂:提供一个创建一系列相关或相互依赖对象的接口,而无须指定它们的具体类。 三、Factory Method,工厂方法:定义一个用于创建对象的接口,让子类决定实例化哪一个类...

810364804 84

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

设计模式概述

        上周五参见了阿里巴巴的Android开发工程师面试,中间提到了设计模式的相关问题,我并没有答全答好,是一个很好的查缺补漏的机会。   设计模式         设计模式是用来表现程序内部组件(Java类)是如何被组装的,以及每一个组件(Java类)是如何通过相互关联来构成一个庞大的系统,其目的之一就是提高类的可复用性。GOF的论文总结了23种设计模式,根据特点被分为三大类,这三...

PVZHTB的博客 383

【Java】----Java 架构常用设计模式(实战+代码示例)

场景:消息中间件套件(RabbitMQ生产者+消费者、Kafka生产者+消费者)特点:一组关联对象统一创建单例工厂方法建造者代理(AOP)策略模板方法门面装饰器责任链观察者。

记录生活 366

Java 23 种设计模式:从踩坑到精通 | 外观模式 —— 给复杂系统装一个“一键启动”

摘要:当业务需要调用几十个接口、初始化多个子系统才能完成一个操作时,客户端代码会变得臃肿且高度耦合。外观模式通过引入一个统一的高层接口,将复杂子系统的调用细节封装起来,让客户端只需“一键操作”即可完成所有任务。本文从家庭影院的“一键观影”和电商下单场景出发,完整讲解外观模式的原理、Spring 环境下的依赖注入实现、异常转换与事务边界处理、模块化外观设计,并结合 SLF4J 日志门面、Spring JDBC、Spring Cloud Gateway、Service Mesh 等架构应用,帮你掌握“化繁为简”

折哥|智能物流与Java实战,副高数据库工程师。深耕出版社物流WMS/OMS(线体/立库/VGA),也分享Java进阶与OMS电商对接。Oracle→PG实战派。相信沉淀可迁移能力,分享通用技术,不藏不虚。 1101

[面试] - jdk 中的设计模式(加入自己的理解)

下面是JDK中有关23个经典设计模式的示例: Structural(结构模式) Adapter (适配器): 把一个接口或是类变成另外一种。 ● java.util.Arrays#asList()● javax.swing.JTable(TableModel)● java.io.InputStreamReader(InputStream)● java.io.Outp

wfh6732的博客 392

JAVA面试题(1~95)《上》

1、面向对象的特征有哪些方面?  答:面向对象的特征主要有以下几个方面:  - 抽象:抽象是将一类对象的共同特征总结出来构造类的过程,包括数据抽象和行为抽象两方面。抽象只关注对象有哪些属性和行为,并不关注这些行为的细节是什么。  - 继承:继承是从已有类得到继承信息创建新类的过程。提供继承信息的类被称为父类(超类、基类);得到继承信息的类被称为子类(派生类)。继承让变化中的软件系统有了一定的延续性...

ywl470812087的博客 4964

InnoDB 内存结构总览:Change Buffer、AHI 与 Log Buffer

本文系统梳理InnoDB内存结构中的ChangeBuffer、Adaptive Hash Index(AHI)与LogBuffer。ChangeBuffer缓存二级索引页不在内存时的变更,减少随机IO,仅在页加载时合并;聚簇索引修改立即执行,因数据本身不可延后。AHI基于高频等值查询自动构建哈希索引,加速定位,仅支持等值操作。LogBuffer为redo log内存缓冲,配合磁盘日志实现崩溃恢复。三者均服务于性能优化,其中ChangeBuffer与AHI共享BufferPool空间,而LogBuffer独立

bksczm的博客 292

V8 机制、手写核心函数与 TypeScript 类型体操

或固定初始化(如数组先定长、对象先给全字段)保持类型与形状稳定;这些都比"换框架"更基础。只能处理纯数据(丢函数、Date、RegExp、循环引用报错)。生产级深拷贝要处理:原始值短路、循环引用、V8(Chrome / Node 的 JS 引擎)不是"解释一行跑一行"那么简单,它用。图:V8 执行流程——解释执行 + 热点优化,优化失败会 Deopt 回退。JS 内存自动管理,但"自动"不等于"不会漏"。是"固定间隔最多执行一次"。手写 Promise 是"懂异步"的试金石。是"停下后才执行最后一次",

qq_38468358的博客 349

Spring Boot 数据源与 MyBatis(-Plus) 自定义配置详解

本文详解 Spring Boot 中单数据源环境下 HikariCP 与 MyBatis-Plus 的自定义配置。通过手动声明 SqlSessionFactory,实现下划线转驼峰、日志输出、一级缓存策略等精细化控制。结合 HikariCP 核心参数调优(如最大连接数、连接生命周期),确保高性能与稳定性。适用于仅需访问单一数据库的场景,避免多数据源复杂性,兼顾性能与可维护性。

BADAO_LIUMANG_QIZHI的博客 206

Java EE 进阶:8.MyBatis 操作数据库(入门)(第一弹)

Java EE 进阶:8.MyBatis 操作数据库(入门)(第一弹)

要努力去发光,而不是被照亮~ 144

LeetCode Hot 100 二叉树专题(二)3 题(Java)

本篇文章共 3 题:543. 二叉树的直径、102. 二叉树的层序遍历、108. 将有序数组转换为二叉搜索树。 每道题都统一按「① 题目分析 & 解题思路 → ② 常见解法(附代码)及讲解 → ③ 知识点总结」的顺序组织;代码使用 Java 编写,节点定义沿用 LeetCode 默认的 TreeNode。

2401_88612756的博客 368
上一篇: 【Leetcode每日一题:934.最短的桥~~DFS+BFS】
下一篇: 【一篇文章带你详细学习Docker中网络知识体系】
硕风和炜
硕风和炜 优质创作者: Java技术领域 优质创作者: Java技术领域
博客等级 码龄7年 2万+粉丝 1024原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

硕风和炜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值