美文网首页
JavaScript设计模式 | 10-适配器模式

JavaScript设计模式 | 10-适配器模式

作者: 夏海峰 | 来源:发表于2018-08-20 14:08 被阅读8次

1、模式定义

适配器模式,把一个类(对象)的接口(方法和属性)转化成另一个接口,以满足用户需求,以解决类(对象)之间的不兼容性问题。

2、生活中的适配器

两根垂直相交的水管在连接处的直角弯管,就是适配器。两孔插头被转化成三孔插头的电源设备,也是适配器。

所谓代码中的适配器,其实就是为两个不同的代码库所写的额外的兼容性代码。

3、适配器模式 举例

让某个库A适配jQuery库,实现如下:

// 适配器模式,让A框架适配jQuery
window.A = A = jQuery;

4、适配器模式 再举例

让指定的库B,适配jQuery,并用jQuery库中的方法,覆写B库中的某些方法。

// 库B的源码如下:
var B = B || {};
B.g = function(id){
    return document.getElementById(id);
};
B.on = function(id,type,fn){
    var dom = typeof if === 'string' ? this.g(id) : id;
    if(dom.addEventListener){
        dom.addEventListener(type,fn,false);
    }else if(dom.attachEvent){
        dom.attachEvent('on'+type,fn);
    }else{
        dom['on'+type] = fn;
    }
}
// 适配器模式,把B框架转换成jQuery,并覆写B库的两个方法
window.B = B = jQuery;

B.g = function(id){
    return $(id).get(0);
}
B.on = function(id,type,fn){
    var dom = typeof id === 'string' ? $('#'+id) : $(id);
    dom.on(type,fn);
}

事实上,对两种“血缘”比较相近的框架进行适配,相对是比较容易的。对两种“血缘”相差甚远的框架进行适配,是非常复杂的。因此,日常工作中,在使用适配器模式时,尽量以相似的框架为基础。

5、参数适配器

适配器模式,除了可用于两个或多个库之间适配外,还可以用于参数适配。当一个方法所接收的参数较多时,就可以用适配器来优化。示例代码如下:

// 一个需要接收多个参数的方法
function doSomeThing(name,title,age,color,size,price){};

// 适配器模式: 使用适配器来优化这个方法,用一个json对象作为适配参数
function doSomeThing(options){
    var _adapter = {
        name:'清荷',
        title:'设计师',
        age:24,
        color:'yellow',
        size:100,
        price:50.9
    }
    for(var i in _adapter){
        _adapter[i] = options[i] || _adapter[i];
    }
};

6、使用适配器模式,对两种不同的数据结构进行适配

// 数组结构:
var arr = ['geekxia', '工程师', '男', 25];

// 使用适配器模式,把上述的数组结构转化成json结构
function arrToJsonAdapter(arr){
    return {
        name: arr[0],
        job: arr[1],
        gender: arr[2],
        age: arr[3]
    }
}

var geekxia = arrToJsonAdapter(arr);
console.log(geekxia);

7、适配器模式 用于处理服务端的响应数据

// 适配器模式:用于处理不确定的数据源,得到我们希望的数据格式
function ajaxAdapter(data){
    return [data['k1'],data['k2'],data['k3'],data['k4']];
}

// 示例:用指定的数据格式,对服务端的响应数据进行适配
$.ajax({
    url: 'data.php',
    success: function(data,status){
        if(data){
            // 把服务端数据转化成我们希望的数据格式
            var myData = ajaxAdapter(data);
            // do something
        }
    }
});

像这样,通过适配器模式,我们可以把不确定的数据源转化成我们希望的数据格式,即使日后服务端的响应数据的数据格式(或字段名称)发生了变化,我们仍然只需要修改适配即可,而无须修改业务逻辑代码,这使得我们的代码更加容易维护。


完!!!

相关文章

  • JavaScript设计模式 | 10-适配器模式

    1、模式定义 适配器模式,把一个类(对象)的接口(方法和属性)转化成另一个接口,以满足用户需求,以解决类(对象)之...

  • 组合模式设计

    一、设计模式 javascript里面给我们提供了很多种设计模式: 工厂、桥、组合、门面、适配器、装饰者、享元、代...

  • 装饰者模式设计

    一、设计模式 javascript里面给我们提供了很多种设计模式: 工厂、桥、组合、门面、适配器、装饰者、享元、代...

  • 适配器模式

    一、设计模式 javascript里面给我们提供了很多种设计模式: 工厂、桥、组合、门面、适配器、装饰者、享元、代...

  • 简说设计模式之适配器模式

    前言:对于设计模式基础概念可以去看[简说设计模式之设计模式概述] 一、什么是适配器模式 适配器模式(Adapter...

  • 设计模式 - 目录

    设计模式01 - 单例模式 设计模式02 - 工厂模式 设计模式03 - 建造者模式 设计模式04 - 适配器模式...

  • 最常用的设计模式---适配器模式(C++实现)

    适配器模式属于结构型的设计模式,它是结构型设计模式之首(用的最多的结构型设计模式)。 适配器设计模式也并不复杂,适...

  • iOS设计模式(5)策略模式

    设计模式系列文章 《iOS设计模式(1)简单工厂模式》《iOS设计模式(2)工厂模式》《iOS设计模式(3)适配器...

  • iOS设计模式(6)模板模式

    设计模式系列文章 《iOS设计模式(1)简单工厂模式》《iOS设计模式(2)工厂模式》《iOS设计模式(3)适配器...

  • iOS设计模式(7)建造者模式

    设计模式系列文章 《iOS设计模式(1)简单工厂模式》《iOS设计模式(2)工厂模式》《iOS设计模式(3)适配器...

网友评论

      本文标题:JavaScript设计模式 | 10-适配器模式

      本文链接:https://www.haomeiwen.com/subject/ppfliftx.html