当前位置:首页 > CN2资讯 > 正文内容

javascript设计模式-代理

2天前CN2资讯

代理是一个对象,它可以用来控制对另一对象的访问。它与另一个对象实现同样的接口,并且会把任何方法调用传递给那个对象。另外那个对象通常称为本体。代理可以代替其本体被实例化,并使其可被远程访问。它还可以把本体的实例化推迟到真正需要的时候。

对于实例化比较费时的本体,或尺寸比较大以至于不用时不宜保存在内存中的本体这特别有用。另外在处理那些需要较长时间才能把数据载入用户界面的类时,代理也非常有用。代理最适合的场景就是创建一个开销昂贵的资源访问。

简单的代理-不太常用

这个例子没有什么实际的作用,可以做为优化的预留接口。

虚拟代理-常用

在用到时再实例化本体,其网页加载时可能没办法一步初始化PublicLibrary。在第一次调用时才会实例化,这可能会导致第一次调用时时间会比较慢。

var PublicLibraryVirtualProxy = function(catalog) { // implements Library this.library = null; this.catalog = catalog; // Store the argument to the constructor. }; PublicLibraryVirtualProxy.prototype = { _initializeLibrary: function() { if(this.library === null) { this.library = new PublicLibrary(this.catalog); } }, findBooks: function(searchString) { this._initializeLibrary(); return this.library.findBooks(searchString); } };

通用代理模式

一般用来处理加载数据量或处理比较慢的程序,可以在加载前显示正在处理等字样。它们的缺点就是掩盖了本体的大量细节,而且可以直接和本体互换。所以最好是高质量的文档化。

var DynamicProxy = function() { this.args = arguments; this.initialized = false; if(typeof this.class != 'function') { throw new Error('DynamicProxy: the class attribute must be set before ' + 'calling the super-class constructor.'); } // Create the methods needed to implement the same interface. for(var key in this.class.prototype) { // Ensure that the property is a function. if(typeof this.class.prototype[key] !== 'function') { continue; } // Add the method. var that = this; (function(methodName) { that[methodName] = function() { if(!that.initialized) { return } return that.subject[methodName].apply(that.subject, arguments); }; })(key); } }; DynamicProxy.prototype = { _initialize: function() { this.subject = {}; //触发本体的实例化过程. this.class.apply(this.subject, this.args); this.subject.__proto__ = this.class.prototype; var that = this;//每隔一段时间触发一次,一旦实例化完成,则会阻止本体的一切方法调用 this.interval = setInterval(function() { that._checkInitialization(); }, 100); }, _checkInitialization: function() { if(this._isInitialized()) { clearInterval(this.interval); this.initialized = true; } }, _isInitialized: function() { // Must be implemented in the subclass. throw new Error('Unsupported operation on an abstract class.'); } }; var TestProxy = function() { this.class = TestClass; var that = this; addEvent($('test-link'), 'click', function() { that._initialize(); }); // Initialization trigger. TestProxy.superclass.constructor.apply(this, arguments); }; extend(TestProxy, DynamicProxy); TestProxy.prototype._isInitialized = function() { ... // Initialization condition goes here. };
    你可能想看:

    扫描二维码推送至手机访问。

    版权声明:本文由皇冠云发布,如需转载请注明出处。

    本文链接:https://www.idchg.com/info/24987.html

    分享给朋友:

    “javascript设计模式-代理” 的相关文章

    日本VPS全面解析:高性能、低延迟的最佳选择

    日本VPS因其独特的地理位置和卓越的性能,成为许多用户的首选。日本作为亚洲的科技中心,拥有先进的网络基础设施和稳定的电力供应,这为VPS服务提供了坚实的基础。无论是个人用户还是企业用户,日本VPS都能满足多样化的需求。 日本VPS的优势 日本VPS的最大优势在于其地理位置。日本位于亚洲的中心地带,连...

    BT下载机的使用技巧与软件下载推荐

    在数字时代,文件共享变得越来越普遍,BT下载机作为一种基于BitTorrent协议的P2P(Peer-to-Peer)文件共享工具,扮演着重要的角色。我记得第一次接触BT下载机时,发现它的操作不仅简单,还能快速下载大型文件,这让我对它产生了浓厚的兴趣。BT下载机允许用户通过种子文件(.torrent...

    Lightlayer在菲律宾的应用与优势:智能光电解决方案

    光电技术的迅速发展让我们有机会迎接许多新概念和新技术,其中Lightlayer便是一个值得关注的例子。在我第一次听到“Lightlayer”这个词时,它似乎蕴含了科技的无限可能。Lightlayer简单来说是一个光电解决方案,能够通过创新的方式来管理和优化光源。它不仅在设计上追求完美,更在功能上实现...

    如何在PVE中使用OVA文件进行高效虚拟机管理

    在探讨PVE和OVA之前,我想分享一下我的个人体验。近年来,随着云计算和虚拟化技术的飞速发展,我们越来越频繁地接触到这些概念。PVE,即Proxmox Virtual Environment,成为了许多企业青睐的虚拟化解决方案。而OVA,则丰富了我们对动画内容的理解。接下来,我将分别介绍这两个重要的...

    阿里云国际:企业数字化转型的理想云服务解决方案

    阿里云国际概述 阿里云国际成立于2015年,致力于为全球用户提供高效、可靠、安全的云计算服务。作为阿里巴巴集团的一部分,阿里云国际不仅承载着国内市场的技术精华,也积极拓展国际市场。随着全球互联网的快速发展,企业对云服务的需求不断增加,阿里云国际顺应这一趋势,凭借创新的技术和丰富的经验,迅速在全球范围...

    掌握域名优惠,轻松获取注册及续费折扣

    什么是域名优惠? 在网络世界中,域名可以说是你的“家”,而域名优惠则是你入住这个“家”时所获取的折扣或者促销活动。简单来说,域名优惠就是在购买或者续费域名时,所享受到的价格减免。这种优惠通常由域名注册商提供,旨在吸引更多用户注册和使用他们的服务。我们可以看到,域名优惠不仅限于初次注册,也包括后期的续...