代理模式
代理模式是为一个对象提供一个代用品或占位符,以便控制对它的访问。也可以说:帮别人做事。
代理模式(Proxy),为其他对象提供一种代理以控制对这个对象的访问。
生活中有很多的代理模式的场景。例如,明星有经纪人作为代理,老板有秘书作为代理等等,当有事情的时候,会找到经纪人或秘书,再由他们转达给明星或者老板。
demo1
我们来举一个简单的例子,假如男朋友要送女朋友玫瑰花,因为距离太远(异地),想委托店员去送这些玫瑰,那店员就是个代理,那我们如何来做呢?
// 先声明女朋友对象
var girl = function (name) {
this.name = name;
};
// 男朋友
var dudu = function (girl) {
this.girl = girl;
this.sendGift = function (gift) {
alert("Hi " + girl.name + ", 男朋友送你一个礼物:" + gift);
}
};
// 花店店员是代理
var proxyTom = function (girl) {
this.girl = girl;
this.sendGift = function (gift) {
(new dudu(girl)).sendGift(gift); // 替dudu送花咯
}
};
//调用
var proxy = new proxyTom(new girl("女朋友花花"));
proxy.sendGift("999朵玫瑰");
保护代理
通过代理来处理一些不必要的东西,过滤无用信息,可以理解为保护代理。
虚拟代理
根据需要创建开销很大的对象,通过它来存放实例化需要很长时间的真实对象,比如浏览器的渲染的时候先显示问题,而图片可以慢慢显示(就是通过虚拟代理代替了真实的图片,此时虚拟代理保存了真实图片的路径和尺寸。
// 真实对象 代理对象 用户
//原图,很大,加载瞒 很小,加载快 浏览器
//代理模式特点:代理对象与真实对象拥有同样的行为
//真实对象 闭包
var myImage=function(){
var imgNode =document.createElement("img");
document.body.appendChild(imgNode);
return {
setSrc:function(src){
imgNode.src=src;
}
}
})();
// 代理对象 先展示loading等待图片 接着负责拉取真实图片
var ProxyImage=(function(){
var img=new Image(); //内存中的一个图片对象 代理 拉真实图片
img.onload=function(){ //加载完毕 触发该方法
myImage.setSrc(this.src);//this==img 真实图片给真实对象展示
}
return {
setSrc:function(src){
myImage.setSrc("加载中的gif图src");
img.src=src; //真实图片
}
}
})();
// 调用 ->把真实图片给到代理对象
ProxyImage.setSrc("原图地址路径src");