js代理模式:保护代理与虚拟代理

来源:互联网 发布:nginx rewrite是什么 编辑:程序博客网 时间:2024/04/28 14:06
<h1>代理模式</h1><p>代理模式是为一个对象提供一个代用品或占位符,以便控制对它的访问。</p><p>代理模式的关键是,当客户不方便访问一个对象或不满足需要的时候,提供一个替身对象来控制对这个对象的访问,客户实际上访问的是替身对象。替身对象对请求作出一些处理之后,再把请求转交给本体对象。</p><p>代理示例:小明追MM的故事</p><script>var Flower = function(){};var xiaoming = {   sendFlower: function(target){      var flower = new Flower();      target.receiveFlower(flower);   }};var b = {  receiveFlower: function(flower){      a.listenGoodMod(function(){  //监听a的好心情          a.receiveFlower(flower);      })  }};var a = {   receiveFlower: function(flower){       console.log("收到le花:" + flower);   },      listenGoodMod: function(fn){      setTimeout(function(){   //假设10秒之后a的心情变好          fn();      },10000)   }};xiaoming.sendFlower(b);</script><p>保护代理:虽然这只是一个虚拟的例子,但我们可以从中找到代理模式的影子。代理b可以帮助a过滤掉一些请求,比如送花的人中年龄比较大的或者没有宝马的,这种请求就可以直接在代理b处倍拒绝。这种代理叫做保护代理。</p><p>虚拟代理:另外假设现实中的花价格不菲,导致在程序世界里,new Flower()也是一个代价昂贵的操作,那么我们把new Flower()的操作交给代理b去执行,代理b会选择在a心情好的时候在执行new Flower(),这是代理模式的另一种形式,叫做虚拟代理。虚拟代理会把一些开销很大的对象,延迟到真正需要它的时才去创建。代码如下</p><script>   var b = {      receiveFlower: function(){         a.listenGoodMood(function(){      //监听a的好心情             var flower = new Flower();     //延迟创建flower对象             a.receiveFlower(flower);         })      }   }</script><p>保护代理用于控制不同权限的对象对目标对象的访问,但在js并不容易实现保护代理,因为我们很难判断谁访问了某个对象。而虚拟代理是最常用的一种代理模式了。</p>

0 0
原创粉丝点击