# 适配器模式

适配器模式(Adapter):将一个类(对象)的接口(方法或者属性)转化成另外一个接口,以满足用户需求,使类(对象)之间接口的不兼容问题通过适配器得以解决

简单来说, 适配器就像我们生活中用的转换插头. 在编程中, 适配器就是为两个代码库所写的代码兼容运行而书写的额外代码。有了这样的适配器,你就不需要特意地重写以前的功能代码了。你只需要让用以前的代码库所写的代码适配新代码库就可以了。

假如说有一个 A 框架, 现在想让它适配 Jquery:

// 定义框架
var A = A || {};
// 通过ID获取元素
A.g = function(id){
  return document.getElementById(id)
}
// 为元素绑定事件
A.on = function(id, type, fn){
  // 如果传递参数是字符串则以id处理,否则以元素对象处理
  var dom = typeof id === 'string' ? this.g(id) : id;
  // 标准DOM2级添加事件方式
  if(dom.addEventListener){
    dom.addEventListener(type, fn, false);
  // IE DOM2级添加事件方式
  }else if(dom.attachEvent){
    dom.attachEvent('on' + type, fn);
  // 简易添加事件方式
  }else{
    dom['on' + type] = fn;
  }
}

首先 g 方法是通过 id 获取元素,所以通过 $(jQuery的简写名称)方法获取 jQuery 对象然后通过 get 获取第一个成员即可,不过 on 方法有些复杂,我们不能直接替换,因为 jQuery 和我们的 A 库在通过 id 获取元素时是有区别的,jQuery的 id 前面要加 #

A.g = function(id){
  // 通过jQuery获取jQuery对象,然后返回第一个成员
  return $(id).get(0);
}
A.on = function(id, type, fn){
  // 如果传递参数是字符串则以id处理,否则以元素对象处理
  var dom = typeof id === 'string' ? $('#' + id) : $(id);
  dom.on(type, fn);
}

除此之外, 另一个例子是将数组适配成对象:

function arrToObjAdapter(arr){
  return {
    name : arr[0],
    type : arr[1],
    title : arr[2],
    data : arr[3]
  }
}
var arr = ['JavaScript','book','前段编程语言', '8月1日'];
var adapterData = arrToObjAdapter(arr);
console.log(adapterData)  // {name: "JavaScript", type: "book", title: "前段编程语言", data: "8月1日"}

在前后端开发时, 适配器它解决了前后端的数据依赖,前端程序不再为后端传递的数据所束缚,如果后端因为架构改变导致传递的数据结构发生变化,我们只需要写个适配器就可以放心了。

上次更新: 7/4/2020, 4:14:54 AM