资讯专栏INFORMATION COLUMN

代理模式

30e8336b8229 / 2877人阅读

摘要:代理模式分类很多应用场景也很多本文主要讲述在开发中最常用的虚拟代理和缓存代理。虚拟代理虚拟代理实现图片预加载将职责拆分符合面向对象的单一职责原则。

代理模式的定义:为其他对象提供一种代理以控制对这个对象的访问。在某些情况下,一个对象不适合或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。

代理模式分类很多,应用场景也很多,本文主要讲述在js开发中最常用的虚拟代理和缓存代理。

虚拟代理 虚拟代理实现图片预加载
var realImg=(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 () {
        realImg.setSrc(this.src);
    }
    return {
        setSrc:function (src) {
            realImg.setSrc("loading.gif");
            img.src=src;
        }
    }
})();
proxyImage.setSrc("big.png");

将职责拆分,符合面向对象的单一职责原则。但是通常我们会将预加载和设置图片src逻辑都放到realImg中(demo),但是这样做违反设计模式的基本原则,以后网速快了,可能就不需要预加载,需要修改较多代码,维护性不好。

虚拟代理合并http请求

这个在web版本toList中或者文件列表勾选自动保存可以应用,防止手速过快频繁请求,节省带宽,前提是这些http接口具有一致性。

var  synchronousFile=function (id) {
    console.log("开始同步文件,id为 "+id);
}
var proxySynchronousFile=(function () {
    var cache=[],//保存待合并发送请求的id
        timer;
    return function (id) {
        cache.push(id);
        if(timer){
            return;
        }
        timer=setTimeout(function () {
            synchronousFile(cache.join(","));
            clearTimeout(timer);
            timer=null;
            cache.length=0;//按时间段重新初始化
        },2000)
    }
})();


var chkboxs=document.getElementsByTagName("input");
for(var i=0,len=chkboxs.length;i
缓存代理
缓存代理进行计算
var mult=function () {
    var tmp=1;
    for(var i=0;i

适应一些开销大,重复步骤较多的场景。一定要结合具体业务场景分析,进行调优,上面其实也只是演示而已。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/81767.html

相关文章

  • 我的Java设计模式-代理模式

    摘要:下面总结了它俩的异同相同点都需要实现同一个接口或者继承同一个抽象类,并且代理角色和装饰角色都持有被代理角色和构件角色的引用。 写完上一篇之后有小伙伴问我有没有写过代理模式,想看看我的理解。原本我的设计模式系列是按照创建型-行为型-结构型的顺序写下去的,既然小伙伴诚心诚意了,我就大发慈悲的穿插一篇代理模式。开玩笑,题外话。 说起代理模式,就不由得想起经纪人,说起经纪人,就想起了...对,...

    BWrong 评论0 收藏0
  • 设计模式|代理模式

    摘要:三二模式分析代理模式的示意图结构比较简单一般可以简化如下图所示。五总结在代理模式中,要求给某一个对象提供一个代理,并由代理对象控制对原对象的访问,其英文为是一种结构型模式。 一、写在前面 代理模式是常用的结构型设计模式之一、当我们直接访问某些对象存在问题时可以通过代理模式来间接访问,为了保证客户端使用的透明性、所访问的真实对象和代理对象都必须实现同一个接口。 二、代理模式动机与定义 某...

    QiShare 评论0 收藏0
  • 代理模式和装饰者模式

    摘要:简介代理模式和装饰者模式是两种常见的设计模式。这里通过构造函数的参数将被代理对象传入到代理中,也可以通过其它方式,如提供一个方法。下面是的代码输出首先依然是先创建一个需要被代理的对象,然后把它传入到的构造函数中。 简介 代理模式和装饰者模式是两种常见的设计模式。代理模式是为其它对象提供一种代理以控制对这个对象的访问。在某些情况下,一个对象不适合或者不能直接引用另一个对象,而代理对象可以...

    NusterCache 评论0 收藏0
  • js设计模式 --- 代理设计模式

    摘要:代理设计模式代理模式为其他对象提供一种代理以控制对这个对象的访问。代理模式是常见的设计模式之一是指不直接调用实际的对象,而是通过代理对象,来间接的调用实际的对象。对象类定义了代理对象所代表的目标对象。 代理设计模式 代理模式:为其他对象提供一种代理以控制对这个对象的访问。代理模式是常见的设计模式之一,是指不直接调用实际的对象,而是通过代理对象,来间接的调用实际的对象。为什么要采用这种间...

    Tonny 评论0 收藏0
  • 深入理解代理模式

    摘要:代理模式代理类中创建一个真实对象的实例模式的核心装饰者强调的是增强自身,在被装饰之后你能够在被增强的类上使用增强后的功能。 代理模式 在详细了解代理模式之前,可能对于像小秋一样的小白,只知道一些很浅显的概念,或者就知道远程代理啊,静态代理啊,动态代理啊,这些看似可以望文生义的专业名词,但是如果我告诉你代理模式贯穿了我们生活的方方面面,就比如你现在刷着公众号的时候,实际上就用了远程代理模...

    testHs 评论0 收藏0

发表评论

0条评论

30e8336b8229

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<