您好,欢迎访问一九零五行业门户网

JavaScript多态与适配器模式思考

不多说先上一段代码(转载自《javascript设计模式与开发实践》)
//谷歌地图show方法 var googlemap = { googlshow: function() { console.log("谷歌地图"); } }; //百度地图show方法 var baidumap = { baidushow: function() { console.log("百度地图"); } }; //渲染地图函数 var rendermap=function(map){ if(map.show instanceof function){ map.show(); } }; rendermap(googlemap);//输出:开始渲染谷歌地图 rendermap(baidumap);//输出:开始渲染百度地图
对于书中抛出的问题,假设每个地图api提供展示地图的方法名都是show,在实际开发中也许不会如此顺利,书中作者提出的思路是借助适配器模式来解决问题。下面是我仿照适配器模式改进的:
var googlemap = { googlshow: function() { console.log("谷歌地图"); } }; var baidumap = { baidushow: function() { console.log("百度地图"); } }; //适配器参数配置 var maparg = { "googlemap": googlemap.googlshow, "baidumap": baidumap.baidushow }; //适配器地图 var adaptmap = { show: function(arg) { for (var imap in maparg) { for (var fmap in arg) { if (imap && fmap && maparg[imap].name==fmap) { return maparg[imap](); } } } } }; //只关注发出显示地图而不关注具体用哪种地图 var rendermap = function(arg) { adaptmap.show(arg); }; //当增加了搜搜地图,我们需要添加搜搜地图的方法以及修改适配器地图参数 //而不需要对rendermap函数进行修改 var sosomap = { sososhow: function() { console.log("搜搜地图"); } }; maparg.sosomap=sosomap.sososhow; render(sosomap);
其它类似信息

推荐信息