轻松掌握JavaScript代理模式


Posted in Javascript onAugust 26, 2016

在面向对象设计中,有一个单一职责原则,指就一个类(对象、函数)而言,应该仅有一个引起它变化的原因。如果一个对象承担了过多的职责,就意味着它将变得巨大,引起它变化的原因就多,它把这些职责耦合到了一起,这种耦合会导致程序难于维护和重构。 

这时候,我们可以把该对象(本体)的其中一部分职责分离出来给一些第三方对象去做,本体只管自己的一些核心职责,这些第三方对象就称作代理。代理对象可以作为对象(也叫“真正的主体”)的保护者,让真正的主体对象做尽量少的工作。在代理设计模式中,一个对象充当了另一个对象的接口的角色。 

通常代理和本体的接口应该保持一致性,这样当不需要代理的时候,用户可直接访问本体。 

当我们不方便直接访问一个对象时,就可以考虑给该对象招一个代理。 

代理可用于:图片预加载、合并HTTP请求(代理收集一定时间内的所有HTTP请求,然后一次性发给服务器)、惰性加载(通过代理处理和收集一些基本操作,然后仅在真正需要本体的时候才加载本体)、缓存代理(缓存请求结果、计算结果)等

例子1:图片预加载

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('loading.gif');
   img.src = src;
  }
 }
})();

proxyImage.setSrc('show.jpg');

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
js 设置选中行的样式的实现代码
May 24 Javascript
jQuery.validate 常用方法及需要注意的问题
Mar 20 Javascript
微信小程序 Storage API实例详解
Oct 02 Javascript
微信小程序开发一键登录 获取session_key和openid实例
Nov 23 Javascript
微信小程序 scroll-view组件实现列表页实例代码
Dec 14 Javascript
jQuery实现菜单栏导航效果
Aug 15 jQuery
js实现图片放大展示效果
Aug 30 Javascript
js es6系列教程 - 新的类语法实战选项卡(详解)
Sep 02 Javascript
React Native 使用Fetch发送网络请求的示例代码
Dec 02 Javascript
使用jQuery给Table动态增加行、清空table的方法
Sep 05 jQuery
Vue2.x中利用@font-size引入字体图标报错的解决方法
Sep 28 Javascript
javascript实现倒计时关闭广告
Feb 09 Javascript
轻松掌握JavaScript单例模式
Aug 25 #Javascript
很酷的星级评分系统原生JS实现
Aug 25 #Javascript
jQuery 利用$.ajax 时获取原生XMLHttpRequest 对象的方法
Aug 25 #Javascript
轻松掌握JavaScript策略模式
Aug 25 #Javascript
Javascript 6里的4个新语法
Aug 25 #Javascript
Javascript实现代码折叠功能
Aug 25 #Javascript
深入浅出ES6之let和const命令
Aug 25 #Javascript
You might like
WHOIS类的修改版
2006/10/09 PHP
PHP生成Flash动画的实现代码
2010/03/12 PHP
解析PHP无限级分类方法及代码
2013/06/21 PHP
解决laravel5.4下的group by报错的问题
2019/10/16 PHP
javascript 类方法定义还是有点区别
2009/04/15 Javascript
javascript 写类方式之九
2009/07/05 Javascript
Javascript 继承实现例子
2009/08/12 Javascript
javascript 构建一个xmlhttp对象池合理创建和使用xmlhttp对象
2010/01/15 Javascript
DLL+ ActiveX控件+WEB页面调用例子
2010/08/07 Javascript
jQuery学习笔记之jQuery中的$
2015/01/19 Javascript
轻松学习jQuery插件EasyUI EasyUI实现拖放商品放置购物车
2015/11/30 Javascript
浅谈在node.js进入文件目录的问题
2018/05/13 Javascript
node中实现删除目录的几种方法
2019/06/24 Javascript
解决layer弹出层中表单不起作用的问题
2019/09/09 Javascript
vue实现移动端省市区选择
2019/09/27 Javascript
详解vue高级特性
2020/06/09 Javascript
JavaScript实现多文件下载方法解析
2020/08/07 Javascript
vue组件开发之slider组件使用详解
2020/08/21 Javascript
详解Howler.js Web音频播放终极解决方案
2020/08/23 Javascript
JavaScript实现切换多张图片
2021/01/27 Javascript
[13:25]VP vs VICI (BO3)
2018/06/07 DOTA
Python模拟随机游走图形效果示例
2018/02/06 Python
高效使用Python字典的清单
2018/04/04 Python
Python实现输出某区间范围内全部素数的方法
2018/05/02 Python
如何利用pygame实现简单的五子棋游戏
2019/12/29 Python
python将图片转base64,实现前端显示
2020/01/09 Python
html5嵌入内容_动力节点Java学院整理
2017/07/07 HTML / CSS
英国花园药房: The Garden Pharmacy
2017/12/28 全球购物
澳大利亚最便宜的网上药房:Chemist Warehouse
2020/01/30 全球购物
远程调用的原理
2014/07/05 面试题
2014信息公开实施方案
2014/02/22 职场文书
《鞋匠的儿子》教学反思
2014/03/02 职场文书
党员教师群众路线思想汇报范文
2014/10/28 职场文书
生活委员竞选稿
2015/11/21 职场文书
教你使用Pandas直接核算Excel中快递费用
2021/05/12 Python
springboot新建项目pom.xml文件第一行报错的解决
2022/01/18 Java/Android