结构型-适配器模式

概念

Adapter Pattern:又叫包装器模式,将一个接口转换成客户希望的另一个接口,使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。

img

使用

在前端开发中,我们可能会遇到这样的场景:当我们试图调用某个模块或者对象的接口时,发现这个接口的格式不符合我们的需求。

这时有两种解决办法:

  • 第一种:修改原来的接口实现。但是如果原来的代码很复杂,例如一个库或者框架,更改代码不现实
  • 第二种:创建一个适配器,将原接口转换成客户希望的另一个接口,客户只需要使用适配器即可
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
// 老接口
const oldCity = (function() {
return [
{
name: 'hangzhou',
id: 11,
},
{
name: 'jinhua',
id: 12
}
]
}())

// 新接口希望是下面形式
// {
// hangzhou: 11,
// jinhua: 12
// }

// 这时候就可采用适配者模式
const adaptor = function(oldCity) {
const obj = {};
for (let city of oldCity) {
obj[city.name] = city.id
}
return obj
};

console.log(adaptor(oldCity)); // {hangzhou: 11, jinhua: 12}

优点

  • 符合开闭原则:不需要改变现有类,提高类的复用性
  • 目标类和适配器类解耦,提高程序扩展性

缺点

  • 增加了系统的复杂性
  • 适配器模式本质上是一个亡羊补牢的模式,它解决的是现存的两个接口之间不兼容的问题,不应该在软件的初期开发阶段使用该模式;尽量在设计之初就规划好接口的一致性