0

0

前端的设计模式系列-适配器模式

雪夜

雪夜

发布时间:2025-07-21 10:38:35

|

713人浏览过

|

来源于php中文网

原创

在学习和总结设计模式的过程中,确实有必要根据具体的编程语言来调整和理解这些模式。在javascript中,由于其基于原型的动态特性,设计模式的实现可能与传统的静态类型语言有所不同。以下是关于适配器模式的详细总结,按照您提出的“场景” - “设计模式定义” - “代码实现” - “更多场景” - “总”的顺序进行:

场景

在使用第三方库时,常常会遇到当前接口与第三方接口不匹配的情况。例如,使用一个Table组件,它要求返回的表格数据格式如下:

{
  code: 0, // 业务 code
  msg: '', // 出错时候的提示
  data: {
    total: , // 总数量
    list: [], // 表格列表
  }
};

但后端返回的数据格式可能是这样的:

{
  code: 0, // 业务 code
  message: '', // 出错时候的提示
  data: {
    total: , // 总数量
    records: [], // 表格列表
  }
};

此时,可以通过适配器模式进行数据格式的转换。

设计模式定义

维基百科对适配器模式的定义是:在不改变现有类的基础上,让它们能够正常使用另一个类。适配器模式在基于类的语言中有两种实现方式:

立即学习前端免费学习笔记(深入)”;

  1. 组合方式:适配器类内部包含原对象的实例。
  2. 继承方式:适配器类直接继承原类。

以下是UML类图的示例:

前端的设计模式系列-适配器模式

左边的Adapter内部拥有Adaptee的实例,右边的Adapter类直接继承Adaptee类。适配器会将AdapteespecificOperation方法进行相应的处理,包装为operation方法供client使用。

代码实现

在JavaScript中,我们可以使用函数来实现适配器模式。让我们用一个简单的例子来说明:现实生活中,iPhone有两种耳机插口,一种是Lightning,一种是传统的3.5毫米接口。如果是Lightning插口的耳机想要插到传统的3.5毫米接口的电脑上,就需要适配器。

首先,我们用Java来展示传统的适配器模式实现:

HTShop网上购物系统
HTShop网上购物系统

HTShop网上购物系统由恒天网络科技有限公司根据国际先进技术和国内商务特点自主版权开发的一款具有强大功能的B2C电子商务网上购物平台。HTShop以国际上通用流行的B/S(浏览器/服务器)模式进行设计,采用微软公司的ASP.NET(C#)技术构建而成。 2007-11-10 HTShop CS 通用标准版 v1.1.11.10 更新内容自由更换模版功能开放 修改了购买多款商品,会员中心订单只显示

下载
class Lightning耳机 {
    public void 插入Lighting接口() {
        System.out.println("插入到Lighting耳机接口成功");
    }
}

class 传统耳机 { public void 插入到传统耳机孔() { System.out.println("插入到传统耳机孔成功"); } }

class Lightning耳机到传统耳机适配器 extends 传统耳机 { public Lightning耳机 Lightning耳机;

public Lightning耳机到传统耳机适配器(Lightning耳机 耳机) {
    Lightning耳机 = 耳机;
}

public void 插入到传统耳机孔() {
    Lightning耳机.插入Lighting接口();
}

}

class 电脑传统耳机孔 { public 传统耳机 耳机;

public 电脑传统耳机孔(传统耳机 传统耳机) {
    耳机 = 传统耳机;
}

public void 插入耳机() {
    耳机.插入到传统耳机孔();
}

}

public class Main { public static void main(String[] args) { 传统耳机 传统耳机 = new 传统耳机(); 电脑传统耳机孔 电脑传统耳机孔 = new 电脑传统耳机孔(传统耳机); 电脑传统耳机孔.插入耳机(); // 插入到传统耳机孔成功

    Lightning耳机 Lightning耳机 = new Lightning耳机();
    电脑传统耳机孔 电脑传统耳机孔2 = new 电脑传统耳机孔(new Lightning耳机到传统耳机适配器(Lightning耳机));
    电脑传统耳机孔2.插入耳机(); // 插入到Lighting耳机接口成功
}

}

接下来,我们将其转换为JavaScript的实现:

const Lightning耳机 = {
插入Lighting接口() {
console.log("插入到Lighting耳机接口成功");
}
};

const 传统耳机 = { 插入到传统耳机孔() { console.log("插入到传统耳机孔成功"); } };

const 电脑传统耳机孔 = { 插入耳机(耳机) { 耳机.插入到传统耳机孔(); } };

const Lightning耳机到传统耳机适配器 = function(Lightning耳机) { return { 插入到传统耳机孔() { Lightning耳机.插入Lighting接口(); } }; };

电脑传统耳机孔.插入耳机(传统耳机); // 插入到传统耳机孔成功 电脑传统耳机孔.插入耳机(Lightning耳机到传统耳机适配器(Lightning耳机)); // 插入到Lighting耳机接口成功

回到开头的问题,Table组件提供了一个responseProcessor的钩子,我们可以通过这个钩子将接口返回的数据进行包装:

{
...
responseProcessor(res) {
return {
...res,
msg: res.message, // 出错时候的提示
data: {
...res.data,
list: res?.data?.records || [], // 表格列表
}
};
},
...
}

更多场景

除了应对数据格式不一致的问题,适配器模式还可以为上层提供统一接口,解决兼容性问题。一个典型的例子是jQuery,它通过适配器模式来处理不同浏览器的兼容性问题。例如:

// Create the request object
// (This is still attached to ajaxSettings for backward compatibility)
jQuery.ajaxSettings.xhr = window.ActiveXObject !== undefined ?
// Support: IE6-IE8
function() {
// XHR cannot access local files, always use ActiveX for that case
if (this.isLocal) {
return createActiveXHR();
}
// Support: IE 9-11
// IE seems to error on cross-domain PATCH requests when ActiveX XHR
// is used. In IE 9+ always use the native XHR.
// Note: this condition won't catch Edge as it doesn't define
// document.documentMode but it also doesn't support ActiveX so it won't
// reach this code.
if (document.documentMode > 8) {
return createStandardXHR();
}
// Support: IE
} :
createStandardXHR;

适配器模式是一种相对简单的设计模式,在JavaScript中可以通过函数进行转换。适配器模式和代理模式在代码结构上相似,但它们的意图不同:适配器模式是为了解决两个对象之间不匹配的问题,而代理模式是为了增强原对象的功能,提供的接口不会改变。

通过学习和总结适配器模式,我们可以更好地理解如何在JavaScript中应用设计模式,以解决实际开发中的问题。

相关专题

更多
java
java

Java是一个通用术语,用于表示Java软件及其组件,包括“Java运行时环境 (JRE)”、“Java虚拟机 (JVM)”以及“插件”。php中文网还为大家带了Java相关下载资源、相关课程以及相关文章等内容,供大家免费下载使用。

841

2023.06.15

java正则表达式语法
java正则表达式语法

java正则表达式语法是一种模式匹配工具,它非常有用,可以在处理文本和字符串时快速地查找、替换、验证和提取特定的模式和数据。本专题提供java正则表达式语法的相关文章、下载和专题,供大家免费下载体验。

742

2023.07.05

java自学难吗
java自学难吗

Java自学并不难。Java语言相对于其他一些编程语言而言,有着较为简洁和易读的语法,本专题为大家提供java自学难吗相关的文章,大家可以免费体验。

738

2023.07.31

java配置jdk环境变量
java配置jdk环境变量

Java是一种广泛使用的高级编程语言,用于开发各种类型的应用程序。为了能够在计算机上正确运行和编译Java代码,需要正确配置Java Development Kit(JDK)环境变量。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

397

2023.08.01

java保留两位小数
java保留两位小数

Java是一种广泛应用于编程领域的高级编程语言。在Java中,保留两位小数是指在进行数值计算或输出时,限制小数部分只有两位有效数字,并将多余的位数进行四舍五入或截取。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

399

2023.08.02

java基本数据类型
java基本数据类型

java基本数据类型有:1、byte;2、short;3、int;4、long;5、float;6、double;7、char;8、boolean。本专题为大家提供java基本数据类型的相关的文章、下载、课程内容,供大家免费下载体验。

446

2023.08.02

java有什么用
java有什么用

java可以开发应用程序、移动应用、Web应用、企业级应用、嵌入式系统等方面。本专题为大家提供java有什么用的相关的文章、下载、课程内容,供大家免费下载体验。

430

2023.08.02

java在线网站
java在线网站

Java在线网站是指提供Java编程学习、实践和交流平台的网络服务。近年来,随着Java语言在软件开发领域的广泛应用,越来越多的人对Java编程感兴趣,并希望能够通过在线网站来学习和提高自己的Java编程技能。php中文网给大家带来了相关的视频、教程以及文章,欢迎大家前来学习阅读和下载。

16926

2023.08.03

Java JVM 原理与性能调优实战
Java JVM 原理与性能调优实战

本专题系统讲解 Java 虚拟机(JVM)的核心工作原理与性能调优方法,包括 JVM 内存结构、对象创建与回收流程、垃圾回收器(Serial、CMS、G1、ZGC)对比分析、常见内存泄漏与性能瓶颈排查,以及 JVM 参数调优与监控工具(jstat、jmap、jvisualvm)的实战使用。通过真实案例,帮助学习者掌握 Java 应用在生产环境中的性能分析与优化能力。

19

2026.01.20

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PostgreSQL 教程
PostgreSQL 教程

共48课时 | 7.5万人学习

Git 教程
Git 教程

共21课时 | 2.8万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号