javascript代理模式

代理模式是给对象提供一个代用品或占位符,以便控制对它的访问
参考《javascript模式设计与开发实践》

缓存代理

缓存代理可以为一些开销比较大的运算结果提供暂时的存储,下一次运算时如果传递参数和缓存的参数一致,则可是直接返回前面存储的运算结果

计算乘积的实例

var mult = function(){  //默认传递的arguments参数列表
        console.log( '开始计算乘积' );
        var a = 1;
        for ( var i = 0, l = arguments.length; i < l; i++ ){
            a = a * arguments[i];
        }
        return a;
    };
    mult( 2, 3 ); // 输出:6
    mult( 2, 3, 4 ); // 输出:24
    //现在加入缓存代理函数:

    var proxyMult = (function(){
        var cache = {};  //缓存对象
        return function(){
            var args = Array.prototype.join.call( arguments, ',' ); 
            if ( args in cache ){ //如果合并的参数在缓存中
                return cache[ args ]; //直接分会缓存数据
            }
            return cache[ args ] = mult.apply( this, arguments ); 
                        //调用函数之后存储到缓存对象中
        }
    })();

    proxyMult( 1, 2, 3, 4 ); // 输出:24  //第一次计算
    proxyMult( 1, 2, 3, 4 ); // 输出:24 //第二次计算,直接存缓存中获取

//这里的两个函数,multi负责计算,proxyMulti负责缓存的存储和读取。
//两个函数分功能完成对应的功能
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,923评论 18 139
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,765评论 18 399
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 173,287评论 25 708
  • 在工作和生活中,我们经常会看到这样的现象,有些人,在看待人和问题的时候,总是比一般人看的更清楚,想的更透彻,给别人...
    爱思考的90后阅读 1,959评论 0 4
  • 可是我没有故事啊,小城姑娘做了一个无奈的表情,嗯,是给我的。 追着小城姑娘两三个星期了,小城姑娘上公交车我也傻傻的...
    盐宁为阅读 503评论 0 2