返回

适配器模式

适配器模式是为了让新旧两个接口适配

//以下例子显示不同地图

var baiduMap = {
    show: funciton() {
        console.log("渲染百度地图");
    }
};
var googleMap = {
    show: function() {
        console.log("渲染谷歌地图");
    }
}

var renderMap = function(map) {
    if(map.show instanceof Function) {
        map.show();
    }
}
// 但是如果有一天百度地图的show方法变成了display方法
// 这是我们要添加一个适配器名为baiduMapAdapter

var baiduMap = {
    display: funciton() {
        console.log("渲染百度地图");
    }
};

var baiduMapAdapter = {
    show: function() {
        return baiduMap.display();
    }
};
render(baiduMapAdapter)

// 假设广东省的数据格式如下
var getGDCity = function() {
    var guangdongCity = [{
        name: 'shenzhen',
        id: 11
    },{
        name: 'guangzhou',
        id: 12
    }];
    return guangdongCity
};
var render = function(fn) {
    console.log("开始渲染广东地图");
    document.write(JSOn.stringify(fn()))
}

// 又假设有天更换了数据格式如下
var guangdongCity = {
    shenzhen: 11,
    guangzhou: 12,
    zhuhai: 13
};

// 这时候就需要一个数据的适配
var addressAdapter = function(oldAddressfn) {
    var address = {},
    oldAddress = oldAddressfn();

    for(var i=0,c;c=oldAddress[i++];) {
        address[c.name] = c.id;
    } 

    return function() {
        return address;
     }
}

render(addressAdapter )