代理模式
代理模式是为一个对象提供一个代用品或占位符,以便控制对它的访问。
保护代理和虚拟代理
-
保护代理:代理B可以帮助A过滤掉一些请求
-
虚拟代理:把一些开销很大的对象,延迟到真正需要它的时候采取创建
虚拟代理的应用
-
图片预加载
-
虚拟代理合并HTTP请求(防抖节流???)
缓存代理
缓存代理可以为一些开销大的运算结果提供暂时的存储,在下次运算时候,如果传递进来的参数跟之前一致,则可以直接返回前面的存储的运算结果。
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
缓存代理可用于ajax请求缓存数据
用高阶函数动态创建代理p101
其他代理
-
防火墙代理:控制网络资源的访问,保护主机不让“坏人”接近
-
远程代理:为一个对象在不同的地址空间提供局部代理,在Java中,远程代理可以是另一个虚拟机中的对象。
-
保护代理:用于对象应该有不同访问权限的情况。
-
智能引用代理:取代了简单地指针,它在访问对象时执行一些附加操作,比如计算一个对象被引用的次数
-
写时复制代理:通常用于复制一个庞大对象的情况。写时复制代理延迟了复制的过程,当对象真正被修改时候,才对它进行复制操作。写时复制代理是虚拟代理的一种变体,DLL(操作系统中的动态链接库)是其典型运算场景。
JavaScript中最常用的是虚拟代理和缓存代理