ThinkChat🤖让你学习和工作更高效,注册即送10W Token,即刻开启你的AI之旅 广告
[TOC] # 适配器模式 将原接口转换为客户希望的另一个接口,客户只需要和适配器打交道 ## 适配器模式的应用 当百度地图和google地图提供的接口一致时 ```javascript var googleMap = { show: function(){ console.log('开始渲染地图'); } }; var baiduMap = { show: function(){ console.log('开始渲染地图'); } }; var renderMap = function(map){ if(map.show instanceof Function){ map.show(); } }; renderMap(googleMap); renderMap(baiduMap); ``` 这时可以完美的运行着,但是当百度地图的接口发生改变时 ```javascript var googleMap = { show: function(){ console.log('开始渲染地图'); } }; var baiduMap = { display: function(){ console.log('开始渲染地图'); } }; var baiduAdapter = { // 增加 baiduAdapter 来解决问题 show: function(){ return baiduMap.display(); } } var renderMap = function(map){ if(map.show instanceof Function){ map.show(); } }; renderMap(googleMap); renderMap(baiduAdapter); ``` 适配器模式的结构和装饰者模式、代理模式、外观模式都比较像,都属于“包装模式”,都是由一个对象来包装另一个对象。 - 适配器模式主要用来解决两个已有接口之间不太匹配的问题,它不考虑这些接口是怎样实现的,也不考虑它们将来可能会如何演化。适配器模式不需要改变已有的接口,就能使它们协同作用。 - 装饰者模式和代理模式不会改变原有对象的接口,但装饰者模式的作用是为了给对象增加功能。装饰者模式常常形成一条长的装饰链,而适配模式通常只包装一次。代理模式是为了控制对象的访问,通常也只包装一次。 - 外观模式的作用倒是和适配器比较相似,有人把外观模式看成一组对象的适配器,但外观模式最显著的特点是定义了一个新的接口。