资讯专栏INFORMATION COLUMN

JS设计模式——代理模式

moven_j / 1329人阅读

摘要:介绍代理模式是一个非常有意义的模式,当客户不方便直接访问一个对象或不满足要求时,提供一个替身对象来控制对这请输入代码个对象的访问。定义代理模式是为一个对象提供一个代用品或占位符,以便控制对它的访问意义减少一个对象承担过多的职责,减少耦合。

1. 介绍

代理模式是一个非常有意义的模式,当客户不方便直接访问一个对象或不满足要求时,提供一个替身对象来控制对这请输入代码个对象的访问。

2. 定义

代理模式是为一个对象提供一个代用品或占位符,以便控制对它的访问

3. 意义

减少一个对象承担过多的职责,减少耦合。

4. 代理模式介绍 1. 保护代理

保护代理的作用就是过滤一些请求.在这个例子中很多人都送小红花,但是小红不是所有人的花都收,而是只收35岁以下的人的花,但每次都要去判断显得麻烦,就可以交给代理对象去判断,符合条件的才把花送给小红。

    var Flower=function(){}
    var xiaoming={
        age:23,
        sendFlower:function(target){
            var flower= new Flower()
            target.receiveFlower(flower,this.age)
        }
    }
    var xiaohua={
        age:60,
        sendFlower:function(target){
            var flower= new Flower()
            target.receiveFlower(flower,this.age)
        }
    }
    var proxy={
        receiveFlower(flower,age){
            if(age<=35){
                xiaohong.receiveFlower(flower)
            }
        }
    }
   var xiaohong={
       receiveFlower(flower){
           console.log("i receive a flower")
       }
   }
   xiaoming.sendFlower(proxy)
   xiaohua.sendFlower(proxy)
2. 虚拟代理(重点)

虚拟代理就是把一些开销很大的对象延迟到真正需要它的时候才去创建。在这个例子中虽然设置了src属性,但是会推迟到图片加载完才设置src属性。虚拟代理还可以应用于合并http请求,处理惰性加载应用。

var myImage=(function(){
    var imgNode=document.createElement("img")
    document.body.appendChild(imgNode)
    return{
        setSrc:function(src){
            imgNode.src=src
        }
    }
})()
var proxy=(function(){
    var img=new Image
    img.onload=function(){
        console.log(myImage)
        myImage.setSrc(this.src)
    }
    return{
        setSrc:function(src){
            myImage.setSrc("https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1528824410335&di=babef45d6ef1591c6b373f62af81de3b&imgtype=0&src=http%3A%2F%2Fh.hiphotos.baidu.com%2Fzhidao%2Fwh%253D450%252C600%2Fsign%3Dbf193fc3f8f2b211e47b8d4affb0490e%2Fe824b899a9014c08c1277115097b02087bf4f466.jpg")
            img.src=src
        }
    }
})()
proxy.setSrc("http://img18.3lian.com/d/file/201704/13/3e6a1f173606db1d9041ecb6e492adcb.gif")
3. 缓存代理

缓存代理是把一些开销打的运算结果先储存起来,下次运算如果传递参数与之前一致则返回之前的运算结果,calculate函数只会调用一次。

var calculate=function(){
    var count=1
    for(var i=0,len=arguments.length;i
5. 代理和接口一致性

在上面的例子中可以看到代理对象和实际对象都拥有相同的方法,这有利于后续如果不需要代理了,直接把实际对象换上去就可以了,不需要做过多的修改。

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

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

相关文章

  • js设计模式 --- 代理设计模式

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

    Tonny 评论0 收藏0
  • JS代理模式《JavaScript设计模式与开发实践》阅读笔记

    摘要:保护代理和虚拟代理保护代理当有许多需求要向某对象发出一些请求时,可以设置保护代理,通过一些条件判断对请求进行过滤。虚拟代理在程序中可以能有一些代价昂贵的操作。而虚拟代理是最常用的一种代理模式。 代理模式 代理模式是为一个对象提供一个代用品或占位符,以便控制对它的访问。 保护代理和虚拟代理 保护代理:当有许多需求要向某对象发出一些请求时,可以设置保护代理,通过一些条件判断对请求进行过滤。...

    mist14 评论0 收藏0
  • JS设计模式代理模式

    摘要:什么是代理模式代理模式,类似于明星的经纪人,想要拜访明星,需要先通过经纪人的沟通。不同于装饰器,那种动态加载一个对象,可以说在代理模式当中,代理是早已既定的。又称单一功能原则,面向对象五个基本原则之一。 什么是代理模式 代理模式,类似于明星的经纪人,想要拜访明星,需要先通过经纪人的沟通。而在JS当中,如果想访问一个类,需要通过另一个类来间接访问 。不同于装饰器,那种动态加载一个对象,可...

    widuu 评论0 收藏0
  • JS设计模式-代理模式

    摘要:代理模式的定义为其他对象提供一种代理以控制对这个对象的访问。代理模式在客户端和目标对象之间起到一个中介作用,这样可以起到保护目标对象的作用。代理对象也可以对目标对象调用之前进行其他操作。 代理模式的定义:为其他对象提供一种代理以控制对这个对象的访问。在某些情况下,一个对象不适合或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。 原文链接 虚拟代理 虚拟代理...

    马龙驹 评论0 收藏0
  • 每天一个设计模式·代理模式

    摘要:代理模式原文地址更多设计模式系列教程更多免费教程博主按每天一个设计模式旨在初步领会设计模式的精髓,目前采用靠这吃饭和纯粹喜欢两种语言实现。代理模式优缺点代理模式有高度解耦对象保护易修改等优点。 代理模式·原文地址 更多《设计模式系列教程》 更多免费教程 博主按:《每天一个设计模式》旨在初步领会设计模式的精髓,目前采用javascript(_靠这吃饭_)和python(_纯粹喜欢_)...

    XiNGRZ 评论0 收藏0
  • 每天一个设计模式·代理模式

    摘要:代理模式原文地址更多设计模式系列教程更多免费教程博主按每天一个设计模式旨在初步领会设计模式的精髓,目前采用靠这吃饭和纯粹喜欢两种语言实现。代理模式优缺点代理模式有高度解耦对象保护易修改等优点。 代理模式·原文地址 更多《设计模式系列教程》 更多免费教程 博主按:《每天一个设计模式》旨在初步领会设计模式的精髓,目前采用javascript(_靠这吃饭_)和python(_纯粹喜欢_)...

    MasonEast 评论0 收藏0

发表评论

0条评论

moven_j

|高级讲师

TA的文章

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