适配器模式可以用来在现有接口和不兼容的类之间进行适配。
适配器模式的特点
适配器可以被添加到现有代码来协调两个不同的接口。
现有接口对手头的工作不够直观或实用,可以使用适配器模式来简化或丰富接口。
适配器与门面模式的区别
适配器与门面模式都修改接口,区别在于怎么修改接口:
门面模式只是简化接口,不提供额外的选择,有时需要做出假定
适配器要把一个接口转化为另一个接口
示例
适配两个库
function prototypeToYUIAdapter() {
return YAHOO.util.Dom.get(arguments);
}
function YUIToPrototypeAdapter(el) {
return $.apply(window, el instanceof Array ? el : [el]);
}
调用方式不变实现方式发生变化。将原来的调用方式变成新接口可以接受的调用方式
渲染城市
function getCity(){
let citys = [{
name:'广州',
id:1
},{
name:'深圳',
id:2
},{
name:'中山',
id:3
},{
name:'东莞',
id:4
}]
return function () {
return citys;
};
}
function render(adress){
console.log(JSON.stringify(adress));
}
// 新数据结构
let city = {
'广州':1,
'深圳':2,
'中山':3,
'东莞':4
}
function adaptor(oldAdressFn){
let newAdress = {};
let oldAdress = oldAdressFn();
oldAdress.forEach(item => {
newAdress[item.name] = item.id
});
return newAdress;
}
render(adaptor(getCity()))
适配器模式的适用场合
适配器协调语法的差异,适配器适配的应该是类似的方法。 适配器主要用来解决,现有的两个接口不匹配的问题,适配器不需要改变已有的接口,就能使其协同作用。
适配器模式之利
适配器有助于避免大规模改写代码 用一个新的接口对现有类的接口进行包装
适配器模式之弊
适配器模式会引入一批需要支持的新工具
领取专属 10元无门槛券
私享最新 技术干货