从浅入深学习中介者模式

简介: 在软件开发中,设计模式是一种用于解决常见问题的重要工具。其中,Mediator(中介者)/Middleware(中间件)设计模式在处理多个组件之间的通信和协调时非常有用。本文将从浅入深地介绍Mediator/Middleware模式,包括其定义、用途以及如何使用JavaScript实现它。

hello 大家好,我是 superZidan,这篇文章想跟大家聊聊 从浅入深学习中介者模式,如果大家遇到任何问题,欢迎联系我

什么是Mediator/Middleware模式?

Mediator/Middleware模式是一种行为型设计模式,旨在通过引入一个中介者或中间件来协调多个组件之间的通信。这种模式将复杂的交互逻辑从组件中分离出来,使得每个组件只需关注自身的功能,而不需要与其他组件直接通信。中介者/中间件作为一个独立的实体,负责处理组件之间的通信和协调,从而简化了组件之间的交互逻辑。

Mediator/Middleware模式的用途

Mediator/Middleware模式在许多场景中都能发挥作用。以下是一些常见的用途:

  1. 解耦组件之间的通信
    当多个组件之间存在复杂的通信关系时,直接的组件之间的交互会变得混乱而难以维护。通过引入一个中介者/中间件,组件之间的通信将变得解耦,每个组件只需通过中介者来进行通信,而无需直接依赖其他组件。

  2. 集中管理交互逻辑
    中介者/中间件作为一个独立的实体,负责处理组件之间的交互逻辑。这样一来,交互逻辑集中在中介者/中间件中,使得整个系统的设计和维护更加简单和清晰。

  3. 实现可重用性和可扩展性
    通过将通用的交互逻辑抽象到中介者/中间件中,可以使这些逻辑得到复用。当需要添加新的组件时,只需将其注册到中介者/中间件中,而无需修改现有组件的代码。

使用JavaScript实现Mediator/Middleware模式

接下来,我们将使用JavaScript来实现一个简单的Mediator/Middleware模式。我们将通过一个购物车示例来说明其用法。

步骤1:创建中介者/中间件
首先,我们创建一个名为ShoppingCartMediator的中介者/中间件,它负责管理购物车组件之间的通信和交互逻辑。

class ShoppingCartMediator {
   
  constructor() {
   
    this.items = [];
  }

  addItem(item) {
   
    this.items.push(item);
    this.updateTotal();
  }

  removeItem(item) {
   
    const index = this.items.indexOf(item);
    if (index !== -1) {
   
      this.items.splice(index, 1);
      this.updateTotal();
    }
  }

  updateTotal() {
   
    const total = this.items.reduce((sum, item) => sum + item.price, 0);
    console.log(`Total: ${
     total}`);
  }
}

步骤2:创建购物车组件
我们创建两个购物车组件,分别是Product和CartButton。Product组件用于展示商品信息,并在点击加入购物车时通知中介者。CartButton组件用于显示购物车中的商品数量,并在点击时打开购物车。


class Product {
   
  constructor(name, price, mediator) {
   
    this.name = name;
    this.price = price;
    this.mediator = mediator;
  }

  addToCart() {
   
    this.mediator.addItem(this);
  }
}

class CartButton {
   
  constructor(mediator) {
   
    this.mediator = mediator;
    this.count = 0;
  }

  updateCount(count) {
   
    this.count = count;
    console.log(`Cart count: ${
     this.count}`);
  }

  click() {
   
    // 打开购物车
  }
}

步骤3:使用中介者/中间件
现在,我们将使用中介者/中间件来协调购物车组件之间的通信。我们创建一个中介者实例,并将其传递给购物车组件。


const mediator = new ShoppingCartMediator();

const product1 = new Product('Product 1', 10, mediator);
const product2 = new Product('Product 2', 20, mediator);
const cartButton = new CartButton(mediator);

product1.addToCart();
product2.addToCart();

输出:

Total: 10
Total: 30

在上述示例中,当Product组件调用addToCart方法时,它会通知中介者将该商品添加到购物车,并触发更新购物车总价的操作。

结论

Mediator/Middleware模式是一种有助于解耦组件之间通信的设计模式。它通过引入一个中介者/中间件,集中处理组件之间的交互逻辑,提高了系统的可维护性和可扩展性。使用JavaScript实现Mediator/Middleware模式可以简化组件之间的通信,并使系统的设计更加清晰。通过掌握这个模式,你可以更好地组织和管理复杂的交互逻辑,提高代码的可读性和可维护性。

本文介绍了Mediator/Middleware模式的定义、用途以及如何使用JavaScript实现它。希望这篇文章能对初学者理解和应用该模式有所帮助。要深入了解该模式,还可以进一步研究相关的实际应用和高级用法。

目录
相关文章
|
开发框架 自然语言处理 前端开发
【第25期】一文读懂React企业级前端应用框架Umi
【第25期】一文读懂React企业级前端应用框架Umi
840 0
|
Web App开发 存储 Linux
Linux(33)Rockchip RK3568 Ubuntu22.04上通过SSH运行Qt程序和关闭Chrome的密钥提示
Linux(33)Rockchip RK3568 Ubuntu22.04上通过SSH运行Qt程序和关闭Chrome的密钥提示
1383 0
Windows下的CMake下载与安装
Windows下的CMake下载与安装
Windows下的CMake下载与安装
|
10月前
|
存储 安全 算法
深入理解C++模板编程:从基础到进阶
在C++编程中,模板是实现泛型编程的关键工具。模板使得代码能够适用于不同的数据类型,极大地提升了代码复用性、灵活性和可维护性。本文将深入探讨模板编程的基础知识,包括函数模板和类模板的定义、使用、以及它们的实例化和匹配规则。
|
存储 Python
Python 还能播放音频,而且花样多多?
Python 还能播放音频,而且花样多多?
|
存储 安全 Ubuntu
快速理解容器技术的实现原理
与 Docker 类似的容器技术并不是操作系统与生俱来的能力,而是通过组合一些 Linux 特性,实现**进程组隔离**的一种技术。 本篇文章将从介绍容器技术的发展开始,进而说明哪些 Linux 特性组成了容器技术的核心部分。希望您能够借由阅读本篇文章,对 Docker 等容器技术有更深刻的认识。 ## 1. 为什么我们需要容器 容器技术并不是凭空出现的,它来源自时代发展中人们对于如何更高效
556 0
|
存储 Linux
如何查看Linux设备的硬盘信息?
【4月更文挑战第12天】在Linux系统中,查看硬盘信息的常用命令。
505 4
|
Go
Go 定时器:Timer 和 Ticker
本文深入探讨了 Go 语言中的 Timer 和 Ticker 定时器,详细介绍了它们的创建方式、基本用法以及相关的方法等。此外,文章还概括了这两个定时器之间的主要区别,并强调了在使用过程中的注意事项。
601 2
Go 定时器:Timer 和 Ticker
|
机器学习/深度学习 算法
【阿旭机器学习实战】【31】股票价格预测案例--线性回归
【阿旭机器学习实战】【31】股票价格预测案例--线性回归
|
Linux 芯片 开发者
Linux 驱动开发基础知识——内核对设备树的处理与使用(十)
Linux 驱动开发基础知识——内核对设备树的处理与使用(十)
1731 0
Linux 驱动开发基础知识——内核对设备树的处理与使用(十)