博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
javascript设计模式学习之六——代理模式
阅读量:5218 次
发布时间:2019-06-14

本文共 1245 字,大约阅读时间需要 4 分钟。

一、代理模式定义

代理模式的关键是:当客户不方便直接访问一个对象或者不满足需要的时候,提供一个替身对象来控制对这个对象的访问。代理模式需要和本体对外提供相同的接口,对用户来说是透明的。代理模式的种类有很多,诸如防火墙代理,保护代理(帮助过滤掉一些请求,控制不同权限的对象对目标对象的访问),虚拟代理(将一些开销很大的对象,延迟到真正需要的时候才创建),缓存代理等。在javascript中使用较多的是虚拟代理。

二、虚拟代理实现图片预加载

 在这个例子中,不使用虚拟代理固然也能够解决问题,不过采用虚拟代理之后更好地体现了单一职责原则;

//代理模式实现图片预加载    var myImage=(function(){        var realImg=document.createElement('img');        document.body.appendChild(realImg);        return {            setSrc:function(src){                realImg.src=src;            }        };    })();    var proxyImg=(function(){        var img=new Image;        img.onload=function(){            //myImage.setSrc(img.src);            myImage.setSrc(this.src);        }        return {            serSrc:function(src){                myImage.setSrc("file://c:/users/Desktop/loading.gif");                img.src=src;            }        };    })();    //调用方式    proxyImg.setSrc('http://imgcache.qq.com/00.jpg');

(感觉上面的IETF模块模式也是一种单例,似乎,如果需要多个实例的时候采用基于委托的写法,只需要一个的时候,可以使用单例模式)

三、缓存代理

缓存代理可以为一些开销大的计算提供暂时的存储,或者如ajax分页时候,同一页的数据理论上只需要去后台拉取一次,这些已经拉取过的数据在某个地方缓存之后,下一请求同一页的时候,便可以直接使用之前的数据。

//为复杂运算实现缓存代理    /*****计算乘积******/    function mult(){        var ret=1;        for(var i=0;i

 

转载于:https://www.cnblogs.com/bobodeboke/p/5641737.html

你可能感兴趣的文章