手机版

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

时间:2021-08-27 来源:互联网 编辑:宝哥软件园 浏览:

本文阐述了JavaScript设计模式的代理模式。分享给大家参考,如下:

代理模式的定义,代理是控制目标对象访问的对象(代理)。为此,他必须首先拥有与目标对象相同的接口,但他不同于装饰器模式,装饰器模式不修改目标对象,其目的是延迟“复杂”对象的初始化时间。通过这种方式,目标对象可以在使用时被初始化(尤其是对于单一情况)。

代理模式有两种类型:

(1)普通代理人

(2)惰性试剂

有关详细信息,请参见以下示例

一、普通代理模式

第一步,接口检查文件的引用

//定义一个静态方法,实现接口和实现类的直接验证。//静态方法不要写出Interface.prototype,因为是写到接口的原型链。//我们需要把静态函数直接写到类级别。//定义接口类var Interface=function (name,Methods){//name:Interface name if(arguments . length 2){ alert('必须是两个参数')} this.name=namethis . methods=[];//为(var i=0)定义空数组加载函数名;长度;i ){ if(typeof methods[i]!='string'){ alert('函数名必须是字符串类型');} else { this . methods . push(methods[I]);} }};接口。确保实现=函数(对象){if(参数。length 2){抛出新错误('必须至少有2个参数')返回false} for(var I=1;长度;I){ var inter=arguments[I];//如果是接口,则必须是接口类型if(inter.constructor!=接口){抛出新错误('如果是接口类,必须是接口类型');}//确定接口中的所有方法是否都实现了//Traverse函数集分析为(var j=0;jinter . methods . length;j ){ var方法=inter . methods[j];//接口中的所有函数//对象[方法]传入的函数//最后是判断传入的函数是否与接口中使用的函数匹配if(!object[method]| | type of object[method]!='function' ){//实现类中必须有一个与接口中使用的方法名相同的方法名。(“接口中的所有方法都没有在实现类中完全实现”)}}}}步骤2,目标类

(1)书籍

//book class/* * bid book id * bName book name * bPrice book price * */varbook=function(bid,bName,bprice) {this。出价=出价;this.bName=bNamethis.bPrice=bPrice}(2)真正的目标类

//target class var my books=(function(){//books in书店var books={ };返回函数(bks) {//初始化if(bks的类型==' object '){ books=bks;}//添加这个。addbook=function(book){ books[book。bid]=book;}//查找这方面的书籍。find book=function(bid){ if(books[bid]){ return books[bid];} else { return null} }//把这本书还给我。returnbook=函数(book) {this。地址簿;}//借这个。lend book=function(bid){ var book=this。findbook(投标);还书;} }})();第三步:普通代理

var myBookShop proxy=function(bks){ var obj=new myBookShop(bks);//类似于目标类的引用//添加这个。addbook=function (book) {obj。地址簿;}//找到这本书。find book=function(bid){ return obj。findbook(投标);}//还这本书。returnbook=函数(book) {obj。returnbook(书籍);}//借这个。lend book=function(bid){ return obj。lendbook(投标);}}第四步,添加数据后,开始访问

var proxy=new my book proxy({ ' 001 ' : new book(' 001 ',' ext js ',' 45 '),' 002' : newbook ('002 ',' js ',' 60')}) alert (proxy.lendbook()

如图所示,目标类和代理同时实现相同的接口。代理一次实例化目标类,然后访问目标类中的方法。

总结一下,这个代理是我们严格的安装定义写的,一般开发不会用到,因为没有意义。

其次,惰性代理在使用时初始化并重新引用目标类。

对代理部分的修改如下,其余部分相同,代码如下

//lazy proxy-在使用过程中初始化目标类时引用var mybookhopproxy=function(bks){ var obj=null;这个。_ init=function(){ obj=new mybook(bks);}//添加这个。addbook=function (book) {this。_ init();地址簿;}//找到这本书。findbook=function (bid) {this。_ init();obj.findBook(出价);}//把这本书还给我。returnbook=函数(book) {this。_ init();obj.returnBook(书);}//借这个。lendbook=function (bid) {this。_ init();返回obj.lendBook(投标);}}修改了代理执行流程,如图

有关JavaScript的更多信息,请查看本网站的专题:《javascript面向对象入门教程》、《JavaScript错误与调试技巧总结》、《JavaScript数据结构与算法技巧总结》、《JavaScript遍历算法与技巧总结》和《JavaScript数学运算用法总结》

希望本文对JavaScript编程有所帮助。

版权声明:JavaScript设计模式的代理模式实例分析是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。