设计模式-适配器模式

简介

  • 适配器模式 (Adapter Pattern)是一种结构型设计模式,它允许不兼容的接口能够一起工作。这种模式通常用于使现有的类与其他类一起工作,而无需修改它们的源代码。在 JavaScript 中,适配器模式可以用来确保不同的类或对象之间能够通过一个统一的接口进行交互

概念

  • 设想你有两个组件或类,它们执行相似的功能但是接口不兼容。例如,一个组件可能使用 fetchData 方法,而另一个组件使用 getData 方法。如果你想在不修改这两个已存在的组件的情况下使它们能够互操作,你可以使用适配器模式。

    适配器模式主要涉及三个角色:

    • 目标接口(Target):客户期望使用的接口。它定义了客户希望如何调用某个功能。
    • 待适配的类(Adaptee):需要被适配的类,它有自己的接口和实现,但不符合目标接口。
    • 适配器(Adapter):实现或继承目标接口,并将目标接口的调用转到待适配的类的实现上。

示例

  • 假设你正在使用一个第三方库,它提供了一个 OldCalculator 类,具有一个 performOperation 方法。现在,你的应用使用了一个新的接口 NewCalculator,这个新接口期望调用的方法名为 calculateOldCalculator 不能直接用于新的应用,因为接口不匹配。

    OldCalculator 类(Adaptee):

    javascript 复制代码
    class OldCalculator {
      performOperation(x, y, operation) {
        switch (operation) {
          case 'add':
            return x + y;
          case 'sub':
            return x - y;
          default:
            return NaN;
        }
      }
    }

    NewCalculator 接口(Target):

    javascript 复制代码
    class NewCalculator {
      calculate() {
        throw new Error('This method should be implemented');
      }
    }

    适配器(Adapter):

    javascript 复制代码
    class CalculatorAdapter extends NewCalculator {
      constructor() {
        super();
        this.oldCalc = new OldCalculator();
      }
    
      calculate(x, y, operation) {
        return this.oldCalc.performOperation(x, y, operation);
      }
    }

    使用适配器

    javascript 复制代码
    // 创建适配器实例
    const adapter = new CalculatorAdapter();
    
    // 现在可以使用新接口调用旧组件的功能
    console.log(adapter.calculate(5, 3, 'add'));  // 输出: 8
    console.log(adapter.calculate(5, 3, 'sub'));  // 输出: 2

总结

  • 适配器模式使得你能够将不兼容的接口桥接到一起工作,而无需改动现有的代码。这提供了很大的灵活性和更简洁的集成方式。在 JavaScript 中,适配器通常是通过创建新的类(适配器),继承或组合目标类或接口,并在内部调用待适配类的方法来实现的。这样,适配器在外部表现为目标接口,而内部利用已存在的实现。这种模式在处理多个库和服务,尤其是在它们期望的接口不一致时,非常有用。
相关推荐
折哥的程序人生 · 物流技术专研2 小时前
Java 23 种设计模式:从踩坑到精通 | 抽象工厂 —— 支付/收款如何成套创建?跨平台 UI 如何一键换肤?
java·开发语言·后端·设计模式
老码观察5 小时前
设计模式实战解读(八):代理模式——控制访问的隐形中间层
设计模式·代理模式
我爱cope6 小时前
【Agent智能体12 | 反思设计模式-使用外部反馈】
人工智能·设计模式·语言模型·职场和发展
geovindu6 小时前
python: Bounded Parallelism Pattern
开发语言·python·设计模式·有界并行模式
我爱cope7 小时前
【Agent智能体11 | 反思设计模式-评估反射的影响的方法】
人工智能·设计模式·语言模型·职场和发展
nnsix7 小时前
设计模式 - 迭代器模式 笔记
笔记·设计模式·迭代器模式
IT策士7 小时前
第 23篇 k8s之Pod:多容器 Pod 与设计模式(Sidecar 等)
设计模式·容器·kubernetes
qq_297574671 天前
设计模式系列文章(基础篇第 11 篇):模板方法模式——定义算法骨架,实现代码复用与流程统一
算法·设计模式·模板方法模式
狂人开飞机1 天前
01. 工厂模式(Factory Pattern)
设计模式·c#
阿狸猿1 天前
论软件设计模式及其应用
设计模式