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

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

中介模式的定义

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


例子:一小时代办与通讯

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

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

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

// 中介者接口
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 物联网
一文搞懂MQTT,如何在SpringBoot中使用MQTT实现消息的订阅和发布
之前介绍了RabbitMQ以及如何在SpringBoot项目中整合使用RabbitMQ,看过的朋友都说写的比较详细,希望再总结一下目前比较流行的MQTT。所以接下来,就来介绍什么MQTT?它在IoT中有着怎样的作用?如何在项目中使用MQTT?
18812 63
一文搞懂MQTT,如何在SpringBoot中使用MQTT实现消息的订阅和发布
|
Oracle Java 关系型数据库
2022 年超详细过程步骤讲解 CentOS 7 安装Maven。以及Mavne配置文件的修改
这篇文章提供了在CentOS 7上安装Maven的详细步骤,包括从官网下载Maven、创建文件夹、上传和解压Maven安装包、配置环境变量、设置Maven源为阿里云、指定jar包仓库位置、配置JDK版本,并验证安装是否成功。
2022 年超详细过程步骤讲解 CentOS 7 安装Maven。以及Mavne配置文件的修改
|
存储 Java 开发工具
轻松搭建分布式对象存储:Spring Boot整合MinIO的快速指南
轻松搭建分布式对象存储:Spring Boot整合MinIO的快速指南
1124 0
轻松搭建分布式对象存储:Spring Boot整合MinIO的快速指南
|
前端开发 Java Maven
java集成opencv(不踩坑),实现人脸检测小demo(含上传人像图片识别接口),windows,IDEA,Springboot
java集成opencv(不踩坑),实现人脸检测小demo(含上传人像图片识别接口),windows,IDEA,Springboot
1817 0
点击增加按钮,添加input,超过三个则增加按钮隐藏
点击增加按钮,添加input,超过三个则增加按钮隐藏
135 0
|
机器学习/深度学习 算法 Java
Java使用OpenCV进行图像操作
OpenCV是一个开源的计算机视觉库,它提供了一系列丰富的图像处理和计算机视觉算法,包括图像读取、显示、滤波、特征检测、目标跟踪等功能。
6115 3
|
Java Linux Maven
centos 安装配置maven最全
centos 安装配置maven最全
474 0
|
C语言 编译器 人工智能
内核bug.h以及GCC内联汇编的学习
版权声明:您好,转载请留下本人博客的地址,谢谢 https://blog.csdn.net/hongbochen1223/article/details/45096245 所有的学习的内容都在注释当中,我的学习过程是,看到这个代码段之后,将其中需要的只是去大体的学习一遍。
1155 0
|
1天前
|
弹性计算 关系型数据库 微服务
基于 Docker 与 Kubernetes(K3s)的微服务:阿里云生产环境扩容实践
在微服务架构中,如何实现“稳定扩容”与“成本可控”是企业面临的核心挑战。本文结合 Python FastAPI 微服务实战,详解如何基于阿里云基础设施,利用 Docker 封装服务、K3s 实现容器编排,构建生产级微服务架构。内容涵盖容器构建、集群部署、自动扩缩容、可观测性等关键环节,适配阿里云资源特性与服务生态,助力企业打造低成本、高可靠、易扩展的微服务解决方案。
1063 0
|
10天前
|
人工智能 运维 安全