从一个小故事讲解中介者模式~

简介: 从一个小故事讲解中介者模式~

中介模式的定义

在很多应用中,不同模块或者组件间的交互复杂且分散,这就难以管理和维护。在这种情况下,我们可以使用中介模式。在中介模式中,我们引入一个中介者对象,这个中介者就像是一个控制塔,负责处理其他对象间的通信。这样,所有的交互都被封装在中介者内部,而其他对象就无需互相知道,实现了解耦。


例子:一小时代办与通讯

让我用一个有趣的例子解释中介模式。想象一下,你正打算计划一场派对,你需要购买蛋糕,买一些饮料,然后还要订一家餐厅。 如果独自处理,你可能需要与三个完全独立的实体进行交涉。

现在,比如说有一个一小时代办服务,你只需要与其沟通,告诉他你所有的要求,然后他就会帮你搞定一切。如果你需要更改你的派对计划,你唯一需要做的只是打一通电话给这个一小时代办服务,其余的就让他来处理。

在编程中,“中介者” 就像是那个一小时代办服务, "组件"就像是买蛋糕的糕点店、提供饮料的供应商以及餐厅

// 中介者接口
interface Mediator {
    public void makeTransaction(Component component, String message);
}

// 具体中介者
class PartyPlanner implements Mediator {
    @Override
    public void makeTransaction(Component component, String message) {
        // Handle communication between components
    }
}

// 具体组件
class Bakery extends Component {
    public Bakery(Mediator mediator){
        super(mediator);
    }
    // Other methods
}

class DrinkSupplier extends Component {
    public DrinkSupplier(Mediator mediator){
        super(mediator);
    }
    // Other methods
}

上面的代码示例中,PartyPlanner 就是我们的 “代办服务”,它作为中介者,负责处理 BakeryDrinkSupplier 之间的通信。

中介模式的好处

中介模式主要有以下这些好处:

  1. 降低耦合度:中介模式可以使各个同事类之间的交互被独立的封装到中介者对象中,使之各个同事类无需直接交互,降低了系统的耦合度,同时中介者将各同事类分散的交互行为集中管理和控制。
  2. 提高重用性:在中介者模式中,同事类主要用来实现一些业务功能,由于它与其他同事类的交互都委托给了中介者,因此各个同事类是松散的、可复用的技术构件,它们和其他同事类或中介者之间不存在直接的依赖关系,是满足“开闭原则”的典型模式。
  3. 更易于扩展和维护:由于中介者封装了系统交互,扩展系统只需添加新的中介者和新的同事类即可,相对来说比较容易。如果系统的某个同事类发生更改,只需要调整它与中介者的交互关系即可,其他的同事类可以不修改。

犹如我们之前提及的派对规划例子,通过中介模式,我们的"一小时代办服务"(中介者)帮我们处理所有复杂的交易,我们无需与蛋糕店、饮料供应商和餐厅直接交涉,使得我们只需要专注于与一小时代办服务的交互,从而使我们的时间和精力得以有效利用。

再者,如果我们想要添加新的组件,例如一家马戏团为我们的派对表演,我们只需要将其连接到中介者上,而无需影响到其他组件。

这正是中介模式的魔力所在。但切记,任何模式都不能滥用,合理地使用,它就能帮你解决许多不必要的麻烦,让代码的可维护性大大提升。

相关文章
|
前端开发 Java Maven
java集成opencv(不踩坑),实现人脸检测小demo(含上传人像图片识别接口),windows,IDEA,Springboot
java集成opencv(不踩坑),实现人脸检测小demo(含上传人像图片识别接口),windows,IDEA,Springboot
1845 0
|
机器学习/深度学习 算法 Java
Java使用OpenCV进行图像操作
OpenCV是一个开源的计算机视觉库,它提供了一系列丰富的图像处理和计算机视觉算法,包括图像读取、显示、滤波、特征检测、目标跟踪等功能。
6187 3
|
C语言 编译器 人工智能
内核bug.h以及GCC内联汇编的学习
版权声明:您好,转载请留下本人博客的地址,谢谢 https://blog.csdn.net/hongbochen1223/article/details/45096245 所有的学习的内容都在注释当中,我的学习过程是,看到这个代码段之后,将其中需要的只是去大体的学习一遍。
1157 0
|
10天前
|
存储 关系型数据库 分布式数据库
PostgreSQL 18 发布,快来 PolarDB 尝鲜!
PostgreSQL 18 发布,PolarDB for PostgreSQL 全面兼容。新版本支持异步I/O、UUIDv7、虚拟生成列、逻辑复制增强及OAuth认证,显著提升性能与安全。PolarDB-PG 18 支持存算分离架构,融合海量弹性存储与极致计算性能,搭配丰富插件生态,为企业提供高效、稳定、灵活的云数据库解决方案,助力企业数字化转型如虎添翼!
|
9天前
|
存储 人工智能 Java
AI 超级智能体全栈项目阶段二:Prompt 优化技巧与学术分析 AI 应用开发实现上下文联系多轮对话
本文讲解 Prompt 基本概念与 10 个优化技巧,结合学术分析 AI 应用的需求分析、设计方案,介绍 Spring AI 中 ChatClient 及 Advisors 的使用。
416 130
AI 超级智能体全栈项目阶段二:Prompt 优化技巧与学术分析 AI 应用开发实现上下文联系多轮对话
|
3天前
|
存储 安全 前端开发
如何将加密和解密函数应用到实际项目中?
如何将加密和解密函数应用到实际项目中?
199 138
|
9天前
|
人工智能 Java API
AI 超级智能体全栈项目阶段一:AI大模型概述、选型、项目初始化以及基于阿里云灵积模型 Qwen-Plus实现模型接入四种方式(SDK/HTTP/SpringAI/langchain4j)
本文介绍AI大模型的核心概念、分类及开发者学习路径,重点讲解如何选择与接入大模型。项目基于Spring Boot,使用阿里云灵积模型(Qwen-Plus),对比SDK、HTTP、Spring AI和LangChain4j四种接入方式,助力开发者高效构建AI应用。
381 122
AI 超级智能体全栈项目阶段一:AI大模型概述、选型、项目初始化以及基于阿里云灵积模型 Qwen-Plus实现模型接入四种方式(SDK/HTTP/SpringAI/langchain4j)
|
3天前
|
存储 JSON 安全
加密和解密函数的具体实现代码
加密和解密函数的具体实现代码
199 136