一, 定义
为一个对象提供一个代用品或占位符, 以便控制对它的访问.
比如, 明星都有经纪人作为代理.
代理模式有3部分组成: 客户, 代理, 本体.
客户访问代理, 代理可以将客户的请求进行一定的处理之后转交给本体.
尽量确保代理和本地接口的一致性, 这样对于客户来说, 代理跟本体是一致的.
二, 场景和实现
比如缓存代理,简单的求乘积程序.
//本体
const mult = function () {
console.log('开始计算');
let a = 1;
for (let i = 0; i < arguments.length; i++) {
a *= arguments[i];
}
return a;
};
//代理
const proxyMult = (function () {
const cache = {};
return function () {
const 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);
proxyMult(1, 2, 3, 4); //第二次调用, 不会调用mult, 而是直接使用代理中的缓存结果.
三, 总结
代理模式的意义: 遵守软件开发的单一职责原则. 一个函数只负责一个功能, 如果过多不利于维护和扩展. 如上, 将缓存的功能和计算的功能分开, 利于维护, 将来计算机性能够好, 不需要代理的话, 直接改为调用本体方法即可.