代理模式是为一个对象提供一个代用品或占位符,以便控制对它的访问。
保护代理: 控制不同权限的对象对目标对象的访问;
虚拟代理: 把一些开销很大的代理,延迟到真正需要它的时候才去创建;
缓存代理: 可以为一些开销大的运算结果提供暂时的存储,在下次运算时,如果传递进来的参数与之前一致,则可以直接返回前面存储的运算结果;
防火墙代理: 控制网络资源的访问,保护主题不让“坏人”接近;
远程代理: 为了一个对象在不同的地址空间提供局部代表,在 Java 中,远程代理可以是另一个虚拟机的对象。
智能引用代理:取代了简单的指针,它在访问对象时执行一些附加操作,比如计算一个对象被引用的次数。
写时复制代理:通常用于复制一个庞大对象的情况。写时复制代理延迟了复制的过程,
当对象被真正修改时,才对它进行复制操作。写时复制代理是虚拟代理的一种变体,DLL
(操作系统中的动态链接库)是其典型运用场景。
Demo:下面重点讲一下 JS 中常用的虚拟代理
用途:
- 图片预加载;
- 虚拟代理合并 HTTP 请求;
- 虚拟代理在惰性加载中应用。
栗子(图片预加载):
var myImage = (function(){
var imgNode = document.createElement( 'img' );
document.body.appendChild( imgNode );
return {
setSrc: function( src ){
imgNode.src = src;
}
}
})();
var proxyImage = (function(){
var img = new Image;
img.onload = function(){
myImage.setSrc( this.src );
}
return {
setSrc: function( src ){
myImage.setSrc( 'file:// /C:/Users/svenzeng/Desktop/loading.gif' );
img.src = src;
}
}
})();
proxyImage.setSrc( 'http:// imgcache.qq.com/music/photo/k/000GGDys0yA0Nk.jpg' );
网友评论