首页 >

学习JavaScript设计模式(代理模式)【javascript】

web前端|js教程

学习JavaScript设计模式(代理模式)【javascript】

javascript,设计模式,代理模式
web前端-js教程
代理模式是为一个对象提供一个代用品或占位符,以便控制对它的访问
代理模式的用处(个人理解):为了保障当前对象的单一职责(相对独立性),而需要创建另一个对象来处理调用当前对象之前的一些逻辑以提高代码的效率、状态判断等。
代理模式中最常用的是虚拟代理缓存代理
第三方保险平台源码,ubuntu 运行r语言,实现爬虫抢票,php rand原理,php源码seolzw
A、虚拟代理
虚拟代理是把一些开销很大的对象,延迟到真正需要它的时候才去创建执行
示例: 虚拟代理实现图片预加载
vc gif合成 源码,vscode红色空格,ubuntu 异常,设置tomcat 内存,云数据库sqlite,仿淘宝评价插件,混合开发前端用的什么框架,爬虫软件违法怎么办,php 透明png,seo盘胧网络,磁力播放网站源码,html网页录音,8x视频图片文章模板lzw
// 图片加载函数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("file://c:/loading.jpg");      img.src = src;    }  }})();// 调用代理对象加载图片proxyImage.setSrc( "http://images/qq.jpg");
示例: 虚拟代理合并HTTP请求
假设一个功能需要频繁的进行网络请求,这会造成相当大的开销,解决方案是通过一个代理函数来收集一段时间之内的请求,一次性发给服务器。
例如:做一个文件同步的功能,当我们选中一个文件时,就同步到另外一台备用服务器上
安卓365日历源码,vscode函数定位,ubuntu pil,怎么安装tomcat服务器,sqlite环境变量,中山市网页设计公司,java连接mysql数据库url,自己服务器备案,神偷3必要插件,h5前端css框架,爬虫检测,php socket,衡水seo,springboot智慧游乐园,网站tdk标签,最流行的新闻网站程序,怎么网页上的logo,如何用html制作简历模板,织梦默认后台,dede文章页面模板是那个,delphi学生成绩管理系统,多目标跟踪matlab程序lzw
// 文件同步函数var synchronousFile = function( id ){  console.log( "开始同步文件,id为:" + id );}// 使用代理合并请求var proxySynchronousFile = (function(){  var cache = [], // 保存一段时间内需要同步的ID    timer; // 定时器指针  return function( id ){    cache[cache.length] = id;    if( timer ){      return;    }    timer = setTimeout( function(){      proxySynchronousFile( cache.join( "," ) ); // 2s 后向本体发送需要同步的ID集合      clearTimeout( timer ); // 清空定时器      timer = null;      cache = []; // 晴空定时器    },2000 );  }})();// 绑定点击事件var checkbox = document.getElementsByTagName( "input" );for(var i= 0, c; c = checkbox[i++]; ){  c.onclick = function(){    if( this.checked === true ){      // 使用代理进行文件同步      proxySynchronousFile( this.id );    }  }}
B、 缓存代理
缓存代理可以为一些开销大的运算结果提供暂时的存储,在下次运算时,如果传递进来的参数跟之前一致,则可以返回前面的运算结果。
示例: 为乘法、加法等创建缓存代理

// 计算乘积var mult = function(){  var a = 1;  for( var i = 0, l = arguments.length; i < l; i++){    a = a * arguments[i];  }  return a;};// 计算加和var plus = function () { var a = 0;  for( var i = 0, l = arguments.length; i < l; i++ ){    a += arguments[i];  }  return a;};// 创建缓存代理的工厂var createProxyFactory = function( fn ){  var cache = {}; // 缓存 - 存放参数和计算后的值  return function(){    var args = Array.prototype.join.call(arguments, "-");    if( args in cache ){ // 判断出入的参数是否被计算过      console.log( "使用缓存代理" );      return cache[args];    }    return cache[args] = fn.apply( this, arguments );  }};// 创建代理var proxyMult = createProxyFactory( mult ),  proxyPlus = createProxyFactory( plus );console.log( proxyMult( 1, 2, 3, 4 ) ); // 输出: 24console.log( proxyMult( 1, 2, 3, 4 ) ); // 输出: 缓存代理 24console.log( proxyPlus( 1, 2, 3, 4 ) ); // 输出: 10console.log( proxyPlus( 1, 2, 3, 4 ) ); // 输出: 缓存代理 10
以上三个示例为大家详细介绍了javascript代理模式,希望对大家的学习有所帮助。


  • 暂无相关文章