适配器模式

2022/4/17 设计模式 大约 1 分钟

将一个类的接口转换成客户希望的另外一个接口,使得原本由于接口不兼容而不能一起工作的那些类能一起工作。适配器模式分为类结构型模式和对象结构型模式两种,前者类之间的耦合度比后者高,且要求程序员了解现有组件库中的相关组件的内部结构,所以应用相对较少些。

该模式的主要优点如下:

  • 客户端通过适配器可以透明地调用目标接口。
  • 复用了现存的类,程序员不需要修改原有代码而重用现有的适配者类。
  • 将目标类和适配者类解耦,解决了目标类和适配者类接口不一致的问题。
  • 在很多业务场景中符合开闭原则。

该模式的主要缺点如下:

  • 适配器编写过程需要结合业务场景全面考虑,可能会增加系统的复杂性。
  • 增加代码阅读难度,降低代码可读性,过多使用适配器会使系统代码变得凌乱。

# 示例一

我们公司想用log来代替console.log,这就是典型的接口发生了改变。

// 适配器模式的基本结构
var log = (function (){
   return window.console.log 
})()
1
2
3
4

# 示例二

目前项目使用的A框架,现在改成了jquery,两个框架十分类似,但是有少数几个方法不同

window.A=$;
A.o=function(){
	return $.on();
}
A.c=function(){
	return c.css();
}
1
2
3
4
5
6
7

# 示例三

为了避免参数不适配产生问题,很多框架会有一个参数适配操作

function f1(obj){
    var _default={
        name:"xxx",
        color:"red",
    }
    for(var item in _default){
        _default[i]=obj[i]||_default[i];
    }
}

1
2
3
4
5
6
7
8
9
10
上次编辑于: 2023年7月4日 09:36