javascript代理模式(proxy)

代理模式的定义:为其他对象提供一种代理以控制对这个对象的访问。

保护代理模式,指某些请求不符合要求,可以直接在代理对象中拒绝,不必通过被代理对象。

虚拟代理模式,是指把一些开销很大的对象延迟到真正需要的时候才去创建。是最常用的一种代理模式。

虚拟代理实现图片预加载

我们经常会遇到因为网络不佳或是图片太大,图片一时加载不出来,常见的做啊是先使用一张loading图片占位,然后用异步的方式加载图片,等图片加载好了再把她填充到img节点里,这种场景就很适合使用虚拟代理。

        var myImage = (function(){
    		var imgNode = document.createElement( 'img' );
    		document.body.appendChild( imgNode );

    		<strong>return {
    			setSrc: function( src ){
    				imgNode.src = src;
    			}
    		};</strong>
    	})();

    	var proxyImage = (function(){
    		var img = new Image;
    		img.onload = function(){
    			myImage.setSrc( this.src );
    		};
    		<strong>return {
    			setSrc: function( src ){
    				myImage.setSrc( 'http://<span style="font-family:KaiTi_GB2312;">xxx</span>.dlmu.edu.cn/zll/img/lu.jpg' );   //<span style="font-family:KaiTi_GB2312;">代理对象设置的占位符</span>
    				img.src = src;
    			}
    		};</strong>
    	})();
    	proxyImage.setSrc( 'http://<span style="font-family:KaiTi_GB2312;">xxx</span>.dlmu.edu.cn/zll/img/1.jpg' );         

限制浏览器的网速后可以明显的看到占位图片的存在。


代理模式的意义

面向对象设计有五大原则:单一职责原则,开放封闭原则,里氏替换原则,依赖倒置原则,接口隔离原则。

其中单一职责原则是指一个类(包括对象和函数等)应该仅有一个引起它变化的原因。而职责被定义为引起变化的原因。使用代理模式则将myImage原本加载图片的职责分离出来由代理模式执行,自己只用负责创建img节点即可。

这两个功能各自分离,不会互相影响,通过代理模式给本体增加了新的功能,这也是符合开放封闭原则的。

而且如果不需要代理模式中的功能后,可以直接请求本体,这一点的关键是本体和代理对象都对外界提供了setSrc方法



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值