javascript代理模式
代理模式是为一个对象提供一个某种功能的替代品,以便控制对它的访问。
在现实生活中,代理模式也是一种非常有意义的模式。比如,演艺明星都有经纪人,经纪人就是他们的代理人。房产中介,婚姻中介,法律顾问等。
保护代理和虚拟代理:
代理将外界的某些信息进行过滤,只有对被代理对象有利、有用的信息才转送给被代理对象,这种模式叫保护代理。代理将一些不需要或不能够立即处理的事务延迟到以后合适的时候处理,这叫做虚拟代理。
保护代理用于控制不同权限的对象对目标对象的访问,但在JavaScript并不容易实现保护代理,因为我们无法判断谁访问了某个对象。而虚拟代理是JavaScript常用的一种代理模式。
虚拟代理实现图片预加载:
在web开发中,图片预加载是一种常用的技术,如果直接给某个img标签节点设置src属性,由于图片过大或者网络不佳,图片的位置往往有段时间是一片空白。这时最好用一张loading图片占位,然后用异步的方式加载图片,等图片加载好了再把它填充到相应区域,这种场景就很适合虚拟代理。
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('预加载的图片的src');
img.src = src;
}
}
})();
单一职责原则:就一个类(也包括对象和函数等)而言,应该仅有一个引起它变化的原因。
如果一个对象承担了多项职责,就意味着这个对象将变得巨大,引起它变化的原因可能会有多个。面向对象设计鼓励将行为分布到细粒度的对象之中,如果一个对象承担的职责过多,等于把这些职责耦合到了一起,这种耦合会导致脆弱和低内聚的设计。当变化发生时,设计可能会遭到意外的破坏。这就是代理模式的意义。