介绍代理,顾名思义就是帮助别人做事,GoF对代理模式的定义如下:代理模式(Proxy),为其他对象提供一种代理以控制对这个对象的访问。代理模式使得代理对象控制具体对象的引用。代理几乎可以是任何对象:文件,资源,内存中的对象,或者是一些难以复制的东西。正文我们来举一个简单的例子,假如dudu要送酸奶小妹玫瑰花,却不知道她的联系方式或者不好意思,想委托大叔去送这些玫瑰,那大叔就是个代理(其实挺好的,可 ...
介绍
代理,顾名思义就是帮助别人做事,GoF对代理模式的定义如下:
代理模式(Proxy),为其他对象提供一种代理以控制对这个对象的访问。
代理模式使得代理对象控制具体对象的引用。代理几乎可以是任何对象:文件,资源,内存中的对象,或者是一些难以复制的东西。
正文
我们来举一个简单的例子,假如dudu要送酸奶小妹玫瑰花,却不知道她的联系方式或者不好意思,想委托大叔去送这些玫瑰,那大叔就是个代理(其实挺好的,可以扣几朵给媳妇),那我们如何来做呢?
// 先声明美女对象// 这是dudu// 大叔是代理 sql = sql.replace('%ID%', ids.join('","')); url += sql + '&' + format + '&' + handler; document.body.appendChild(script); // 添加到队列dd to the queue this.callback = callback; // 设置timeout }, // 单个视频的callback调用 // 多个视频的callback调用 if (data.query) { if (!info) { if (info.style.display === "none") { e = e || window.event; // 不是连接的话就不继续处理了 id = src.href.split('--')[1]; //如果点击的是已经生产的视频信息区域的连接play,就开始播放 var hrefs, i, max, id; hrefs = $('vids').getElementsByTagName('a'); id = hrefs[i].href.split('--')[1];
hrefs[i].parentNode.id = "v" + id;
videos.getInfo(id);
}
};
完整代码:https://github.com/shichuan/javascript-patterns/blob/master/design-patterns/proxy.html
总结
代理模式一般适用于如下场合:
- 远程代理,也就是为了一个对象在不同的地址空间提供局部代表,这样可以隐藏一个对象存在于不同地址空间的事实,就像web service里的代理类一样。
- 虚拟代理,根据需要创建开销很大的对象,通过它来存放实例化需要很长时间的真实对象,比如浏览器的渲染的时候先显示问题,而图片可以慢慢显示(就是通过虚拟代理代替了真实的图片,此时虚拟代理保存了真实图片的路径和尺寸。
- 安全代理,用来控制真实对象访问时的权限,一般用于对象应该有不同的访问权限。
- 智能指引,只当调用真实的对象时,代理处理另外一些事情。例如C#里的垃圾回收,使用对象的时候会有引用次数,如果对象没有引用了,GC就可以回收它了。
参考:《大话设计模式》
同步与推荐
本文已同步至目录索引:深入理解JavaScript系列
深入理解JavaScript系列文章,包括了原创,翻译,转载等各类型的文章,如果对你有用,请推荐支持一把,给大叔写作的动力。
海外公司注册、海外银行开户、跨境平台代入驻、VAT、EPR等知识和在线办理:https://www.xlkjsw.com
原标题:深入理解JavaScript系列(31):设计模式之代理模式
关键词:JavaScript,设计模式,代理模式,Proxy
*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们:
admin#shaoqun.com
(#换成@)。