从浅入深学习中介者模式

简介: 在软件开发中,设计模式是一种用于解决常见问题的重要工具。其中,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实现它。希望这篇文章能对初学者理解和应用该模式有所帮助。要深入了解该模式,还可以进一步研究相关的实际应用和高级用法。

目录
相关文章
|
5月前
|
设计模式
|
9月前
|
设计模式 数据库
几张图带你手拿把掐设计模式六大原则
几张图带你手拿把掐设计模式六大原则
43 0
|
10月前
|
存储 数据管理 人机交互
【软工视频】第九章面向对象技术
【软工视频】第九章面向对象技术
|
设计模式 数据采集 算法
还记得设计模式中称霸武林的的六大设计原则吗?
设计模式中称霸武林的的六大设计原则
110 0
还记得设计模式中称霸武林的的六大设计原则吗?
|
设计模式 Dubbo Java
结构型设计在工作中的一些经验总结
结构型设计在工作中的一些经验总结
72 0
|
设计模式 算法 关系型数据库
把书读薄 | 《设计模式之美》设计原则(上)(三)
继续啃《设计模式之美》,本文是 设计原则(15-22)浓缩总结,实战部分(23-26)拆到下节,没做过Web开发,要点时间消化。 还是那句话:二手知识加工难免有所纰漏,感兴趣有时间的可自行查阅原文,谢谢。
118 0
|
设计模式 关系型数据库 测试技术
把书读薄 | 《设计模式之美》设计原则(上)(一)
继续啃《设计模式之美》,本文是 设计原则(15-22)浓缩总结,实战部分(23-26)拆到下节,没做过Web开发,要点时间消化。 还是那句话:二手知识加工难免有所纰漏,感兴趣有时间的可自行查阅原文,谢谢。
112 0
|
消息中间件 设计模式 监控
把书读薄 | 《设计模式之美》设计原则(上)(二)
继续啃《设计模式之美》,本文是 设计原则(15-22)浓缩总结,实战部分(23-26)拆到下节,没做过Web开发,要点时间消化。 还是那句话:二手知识加工难免有所纰漏,感兴趣有时间的可自行查阅原文,谢谢。
171 0
|
设计模式 存储 算法
把书读薄 | 《设计模式之美》学习导读 & 面向对象(下)
设计模式某些概念比较抽象,认真看完有时似懂非懂,往往没过多久就忘了,在实际设计与编码中,也不知道如何下手,所以需要落地,想办法加深理解,阅读开源项目,应用到项目中等等。 本文是 学习导读(3讲)和面向对象(11讲) 的浓缩总结,二手知识加工难免有所纰漏,感兴趣有时间的可自行查阅原文,谢谢。
77 0
|
设计模式 前端开发 Java
把书读薄 | 《设计模式之美》学习导读 & 面向对象(中)
设计模式某些概念比较抽象,认真看完有时似懂非懂,往往没过多久就忘了,在实际设计与编码中,也不知道如何下手,所以需要落地,想办法加深理解,阅读开源项目,应用到项目中等等。 本文是 学习导读(3讲)和面向对象(11讲) 的浓缩总结,二手知识加工难免有所纰漏,感兴趣有时间的可自行查阅原文,谢谢。
127 0