前端是万能的让前端飞Web前端之路

《JavaScript设计模式与开发实践》之代理模式

2019-12-12  本文已影响0人  肆意木

代理模式是为一个对象提供一个代用品或占位符,以便控制对它的访问。

保护代理: 控制不同权限的对象对目标对象的访问;

虚拟代理: 把一些开销很大的代理,延迟到真正需要它的时候才去创建;

缓存代理: 可以为一些开销大的运算结果提供暂时的存储,在下次运算时,如果传递进来的参数与之前一致,则可以直接返回前面存储的运算结果;

防火墙代理: 控制网络资源的访问,保护主题不让“坏人”接近;

远程代理: 为了一个对象在不同的地址空间提供局部代表,在 Java 中,远程代理可以是另一个虚拟机的对象。

智能引用代理:取代了简单的指针,它在访问对象时执行一些附加操作,比如计算一个对象被引用的次数。

写时复制代理:通常用于复制一个庞大对象的情况。写时复制代理延迟了复制的过程,
当对象被真正修改时,才对它进行复制操作。写时复制代理是虚拟代理的一种变体,DLL
(操作系统中的动态链接库)是其典型运用场景。


Demo:下面重点讲一下 JS 中常用的虚拟代理

用途:

  1. 图片预加载;
  2. 虚拟代理合并 HTTP 请求;
  3. 虚拟代理在惰性加载中应用。

栗子(图片预加载):

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' ); 
上一篇下一篇

猜你喜欢

热点阅读