JavaScript设计模式之代理模式实例分析

  

本文实例讲述了JavaScript设计模式之代理模式。分享给大家供大家参考,具体如下:

  

代理模式的定义,代理是一个对象(代理)用它来控制目标对象的访问。为此他要是先与目标对象相同的接口,但是他不同于装饰者模式,它对目标对象不进行任何修改,它的目的在于延缓”复杂”对象的初始化时间。这样可以在用到这个目标对象的时候再初始化他(对于单例来讲更是重要)。

  

<强>代理模式有两种分类:

  

(1)普通代理

  

(2)惰性代理

  

具体看下面的例子

  

  

步骤一,接口检验文件的引用

     //定义一个静态方法来实现接口与实现类的直接检验//静态方法不要写出接口。原型,因为这是写到接口的原型链上的//我们要把静态的函数直接写到类层次上//定义一个接口类   var=function接口(名称、方法){//名称:接口名字   如果(arguments.length<2) {   alert("必须是两个参数”)   }   this.name=名称;   this.methods=[];//定义一个空数组装载函数名   我(var=0; i< methods.length;我+ +){   如果(typeof方法[我]!=白址?{   alert("函数名必须是字符串类型”);   其他}{   this.methods。推动(方法[我]);   }   }   };   接口。ensureImplement=function(对象){   如果(arguments.length<2) {   把新的错误(“参数必须不少于2个)   返回错误;   }   (var i=1; i< arguments.length;我+ +){   var国米=参数[我];//如果是接口就必须是接口类型   如果(inter.constructor !=接口){   把新的错误(“如果是接口类的话,就必须是接口类型”);   }//判断接口中的方法是否全部实现//遍历函数集合分析   (var j=0; j< inter.methods.length; j + +) {   var方法=inter.methods [j];//接口中所有函数//对象[方法]传入的函数//最终是判断传入的函数是否与接口中所用函数匹配   如果(!对象[方法]| | typeof对象[方法]!="函数"){//实现类中必须有方法名字与接口中所用方法名相同   把新的错误(“实现类中没有完全实现接口中的所有方法”)   }   }   }   }      之前      

步骤,二目标类

  

(1)图书类

     //图书类/*   *投标图书id   * bName图书名称   * bPrice图书价格   * */var书=function(报价,bName bPrice) {   这一点。=报价;   这一点。bName=bName;   这一点。bPrice=bPrice;   }      之前      

(2)真正的目标类

     //目标类   var myBookShop=(函数(){//书店里的书   var书={};   返回函数(noble) {//初始化   如果(typeof noble==岸韵蟆?{   书=商品;   }//加书   这一点。用于将=函数(书){   书(书。投标]=书;   }//找书   这一点。findBook=函数(投标){   如果(书籍(投标)){   返回书(报价);   其他}{   返回null;   }   }//还书   这一点。returnBook=函数(书){   this.addBook(书);   }//借书   这一点。lendBook=函数(投标){   var书=this.findBook(报价);   返回的书;   }   }   })();      之前      

步骤三,普通代理

        var myBookShopProxy=function (noble) {   var obj=new myBookShop (noble);//类似于目标类的引用//加书   这一点。用于将=函数(书){   obj.addBook(书);   }//找书   这一点。findBook=函数(投标){   返回obj.findBook(报价);   }//还书   这一点。returnBook=函数(书){   obj.returnBook(书);   }//借书   这一点。lendBook=函数(投标){   返回obj.lendBook(报价);   }   }      之前      

步骤四,添加数据后,开始访问

        var代理=new myBookShopProxy ({   “001”:新书(“001”、“EXTJS”、“45”),   “002”:新书(“002”、“JS”、“60”)   })   alert (proxy.lendBook (“001”) .bName)      之前      

在普通的代理模式中,我们可以看出代理中对目标对象的引用是一次性初始化的,然后再在该基础上实现其他操作

  

如图:目标类和代理同时实现了同一接口。代理中一次性对目标类进行实例,然后值访问到目标类中的方法。

  

 JavaScript设计模式之代理模式实例分析

JavaScript设计模式之代理模式实例分析