本文共--字 阅读约--分钟 | 浏览: -- Last Updated: 2021-12-15
适配器模式(Adapter):将一个类(对象)的接口(方法或者属性)转化成另外一个接口,以满足用户的需求,使类(对象)之间接口的不兼容问题通过适配器得以解决。
在日常生活中,主机链接显示器时,常因接口不同,需要额外一个适配器,比如(USB转HDMI)。而在代码层面,其实就是为两份代码所写的代码兼容运行而书写的额外代码。
function do(name, title, age, color, size, price) {
// do something
}
// 而记住参数的顺序是很困难的,所以经常使用参数对象方式传入
// 在调用时又无法知道传递的参数是否完整,如有一些必需传入的参数没有传入,一些参数是有默认值来适配传入的这个参数对象
function do(obj) {
var _adapter = {
name: 'jack',
title: 'adapter',
age: 18,
color: 'red',
size: 100,
price: 50
}
for (var key in _adapter) {
_adapter[key] = obj[key] || _adapter[key];
}
// do something
}
var arr = ['JavaScript', 'book', '前端编程语言', '20210801'];
// 该数组中的每个成员代表的意义不同,所以这种数据结构的语义不好
// 所以我们通常会将其适配成对象
function adapter(arr) {
const [name, type, title, time] = arr;
return { name, type, title, time };
}
最重要的是这种模式可以解决前后端的数据依赖,前端程序不再为后端所传输的数据所束缚,如果后端因为架构改变导致传递的数据结构发生变化,我们只需要写个适配器就可以了。
传统设计模式中,适配器模式往往适配两个类接口不兼容的问题,然而在JavaScript中,适配器的应用范围更广,比如适配两个代码库,适配前后端数据等。
不同于外观模式,外观模式的“参与者”往往只有“系统”和“客户”,而适配器的“参与者”往往有三个,“客户”、“适配器”、“系统”,常应用在“客户”和“系统”都不便做出更改时但又不能直接“通信”时,使用适配器模式。
比如,客户上传图片时不会在意图片的文件格式,而系统接口只接受png的格式,这时候就需要适配器来将其他任意的图片类型(jpg/jpeg等)适配为png传递给系统接口。