代理模式是给对象提供一个代用品或占位符,以便控制对它的访问
参考《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负责缓存的存储和读取。
//两个函数分功能完成对应的功能