假设我们要编写一个地图应用,现在有两家可选的地图 API 提供商供我们接入自己的应用。
目前我们选择的是谷歌地图,谷歌地图的 API 中提供了 show 方法,负责在页面上展示整个地图
var googleMap = {
show:function(){
console.log("开始渲染谷歌地图");
}
}
var baiduMap = {
show:function(){
console.log("开始渲染百度地图");
}
}
var renderMap = function( type ){
if(type === 'google'){
googleMap.show();
}else if(type === 'baidu'){
baiduMap.show();
}
};
renderMap('google');
renderMap('baidu');
可以看到,虽然 renderMap 函数目前保持了一定的弹性,但这种弹性是很脆弱的,一旦需要
替换成搜搜地图,那无疑必须得改动 renderMap 函数,继续往里面堆砌条件分支语句。
以下是改进后的代码
var googleMap = {
show:function(){
console.log("开始渲染谷歌地图");
}
}
var baiduMap = {
show:function(){
console.log("开始渲染百度地图");
}
}
var gaodeMap = {
show:function(){
console.log("开始渲染高德地图");
}
}
var renderMap = function( map ){
if(map.show instanceof Function){
map.show();
}
};
renderMap( googleMap );
renderMap( baiduMap );
renderMap( gaodeMap );