JavaScript设计模式-适配器模式
概念
??适配器模式的作用是解决两个软件实体间的接口不兼容的问题。使用适配器模式之后,原本由于接口不兼容而不能工作的两个软件实体可以一起工作。
描述
【JavaScript设计模式-适配器模式】??在程序开发中有许多这样的场景:当试图调用模块或者对象的某个接口时,却发现这个接口的格式并不符合目前的需求。这时候有两种解决办法,第一种是修改原来的接口实现,但如果原来的模块很复杂,或者拿到的模块是一段别人编写的经过压缩的代码,修改原接口就显得不太现实了。第二种办法是创建一个适配器,将原接口转换为客户希望的另一个接口,客户只需要和适配器打交道。
??如果现有的接口已经能够正常工作,那就无需适配器模式。适配器模式是一种“亡羊补牢”的模式,没有人会在程序的设计之初就使用它。
??适配器在生活中的应用非常广泛,我国的生活居民区交流电压是220V,日本和韩国的交流电压大多是100V,而英国和澳大利亚的是240V。笔记本电脑的电源适配器就承担了转换电压的作用,电源适配器使笔记本电脑在100V~240V的电压之内都能正常工作,这也是它为什么被称为电源“适配器”的原因。
应用
??现在举个实例,向googleMap和baiduMap都发出“显示”请求时,googleMap和baiduMap分别以各自的方式在页面中展现了地图:
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 );
// 输出:开始渲染百度地图
??这段程序得以顺利运行的关键是googleMap和baiduMap提供了一致的show方法,但实际开发中第三方的接口方法并不在控制范围之内,假如baiduMap提供的显示地图的方法不叫show而叫display呢?
??baiduMap这个对象来源于第三方,正常情况下都不应该去改动它。此时可以通过增加baiduMapAdapter来解决问题:
var googleMap = {
show: function(){
console.log( '开始渲染谷歌地图' );
}
};
var baiduMap = {
display: function(){
console.log( '开始渲染百度地图' );
}
};
var baiduMapAdapter = {
show: function(){
return baiduMap.display();
}
};
renderMap( googleMap );
// 输出:开始渲染谷歌地图
renderMap( baiduMapAdapter );
// 输出:开始渲染百度地图
小结
??适配器模式主要用来解决两个已有接口之间不匹配的问题,它不考虑这些接口是怎样实现的,也不考虑它们将来可能会如何演化。适配器模式不需要改变已有的接口,就能够使它们协同作用。
参考文献 《JavaScript设计模式与开发实践》
推荐阅读
- 事件代理
- 数组常用方法一
- 设计模式-代理模式-Proxy
- JavaScript|vue 基于axios封装request接口请求——request.js文件
- JavaScript|JavaScript: BOM对象 和 DOM 对象的增删改查
- JavaScript|JavaScript — 初识数组、数组字面量和方法、forEach、数组的遍历
- JavaScript|JavaScript — call()和apply()、Date对象、Math、包装类、字符串的方法
- JavaScript|JavaScript之DOM增删改查(重点)
- 【读书笔记】JavaScript|【读书笔记】JavaScript DOM编程艺术 (第2版)
- JavaScript判断数组的方法总结与推荐