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);
    原文作者:jxycbjhc
    原文地址: https://segmentfault.com/a/1190000007523514
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞