定义
适配器模式是为了解决软件实体间的接口不兼容性。使用适配器以后原本不兼容的两个软件的接口可以工作在一起了。<br />宗旨是不要改变原软件接口的程序代码,在外部使用适配器对数据结构做调整。——参考《javascript模式设计与开发实践》第17章
参考demo
var googleMap = {show: function()方法是showconsole.log( '开始渲染谷歌地图' );}};var baiduMap = {display: function(){ //方法是displayconsole.log( '开始渲染百度地图' );}};var baiduMapAdapter = {show: function(){//适配器也改为show,返回的是displayreturn baiduMap.display();}};//下面是渲染地图的方法,传入地图对象var renderMap = function( map ){//传入地图对象if ( map.show instanceof Function ){ //判断map.show(); //地图对象的show方法//在传入baiduMapAdapter对象的时候,调用show方法,返回的//实际是baiduMap的display方法。}};renderMap( googleMap ); // 输出:开始渲染谷歌地图renderMap( baiduMapAdapter ); // 输出:开始渲染百度地图
总结
如果有以下情况出现时,建议使用:
- 使用一个已经存在的对象,但其方法或属性接口不符合你的要求;
- 你想创建一个可复用的对象,该对象可以与其它不相关的对象或不可见对象(即接口方法或属性不兼容的对象)协同工作;
想使用已经存在的对象,但是不能对每一个都进行原型继承以匹配它的接口。对象适配器可以适配它的父对象接口方法或属性。
适配器模式和其它几个模式的区别
配器和桥接模式虽然类似,但桥接的出发点不同,桥接的目的是将接口部分和实现部分分离,从而对他们可以更为容易也相对独立的加以改变。而适配器则意味着改变一个已有对象的接口。
- 装饰者模式增强了其它对象的功能而同时又不改变它的接口,因此它对应程序的透明性比适配器要好,其结果是装饰者支持递归组合,而纯粹使用适配器则是不可能的。
- 代理模式在不改变它的接口的条件下,为另外一个对象定义了一个代理。
