JavaScript设计模式十五(适配器模式)

JavaScript设计模式十五(适配器模式)

定义

适配器的作用是解决两个软件实体之间接口不兼容的问题

现实生活中的适配器:

  • 港式插头转换器
  • 电源适配器
  • USB转接口

适配器模式的应用

我们之前有这么一个例子:当我们想googleMap和baiduMap都发出“显示”的请求的时候,googleMap和baiduMap都已各自的方式展示地图

var googleMap = {
    show: function() {
        console.log('show google map');
    }
}

var baiduMap = {
    show: function() {
        console.log('show baidu map');
    }
}

var renderMap = function(map) {
    if (map.show instanceof Function) {
        map.show();
    }
}

renderMap(googleMap);
renderMap(baiduMap);

这是理想的情况,但是google和baidu是第三方的sdk我们不知道他们提供的你方法叫什么,比如baidu的不叫show,而是display,那我们上面你的代码就不能用了。这个时候我们可以用baiduAdapter

var googleMap = {
    show: function() {
        console.log('show google map');
    }
}

var baiduMap = {
    display: function() {
        console.log('show baidu map');
    }
}

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

renderMap(googleMap);
renderMap(baiduMapAdapter);

这个就是适配器模式,相对比较简单,其实它的结构和装饰者模式、代理模式都比较像,都是由一个对象来包装另外一个对象,区别的关键是模式的意图。

  • 适配器模式主要是用来解决两个已有接口之间不匹配的问题,它不考虑这些接口室怎么样实现的,也不考虑他们将来可能会如何演化。适配器模式不需要改变已有的接口,能够使他们协同作用
  • 装饰者模式和代理模式是不会改变原有对象的接口,但是装饰者模式的作用是为了给对象增加功能,装饰者模式常常形成一条长的装饰链,而适配器模式通常只包装一次。代理模式是为了控制对对象的访问,通常也只包装一次

猜你喜欢

转载自blog.csdn.net/lihangxiaoji/article/details/80268852