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);
这个就是适配器模式,相对比较简单,其实它的结构和装饰者模式、代理模式都比较像,都是由一个对象来包装另外一个对象,区别的关键是模式的意图。
- 适配器模式主要是用来解决两个已有接口之间不匹配的问题,它不考虑这些接口室怎么样实现的,也不考虑他们将来可能会如何演化。适配器模式不需要改变已有的接口,能够使他们协同作用
- 装饰者模式和代理模式是不会改变原有对象的接口,但是装饰者模式的作用是为了给对象增加功能,装饰者模式常常形成一条长的装饰链,而适配器模式通常只包装一次。代理模式是为了控制对对象的访问,通常也只包装一次