JavaScript设计模式:三、代理模式

序、设计模式分类
一、装饰者模式(原型链)
二、策略模式
三、代理模式
四、发布订阅模式
五、迭代器模式
六、工厂模式
七、外观模式
八、状态模式
九、单例模式
十、适配器模式

参考:https://blog.csdn.net/wuyufa1994/article/details/86557788

一、虚拟代理

1. 简易虚拟代理例子

function Flower(){};
var xiaoming = {
  sendFlower : function(target) {
    var flower = new Flower();
    target.recieveFlower(flower);
  }
}

var a = {
  recieveFlower: function(flower) {
    console.log('A收到花了' + toString.call(flower));
  },
  listenGoodMood: function(fn) {
    setTimeout(function() {
      fn();
    }, 1000);
  }
}

var b = {
  recieveFlower: function(flower) {
    a.listenGoodMood(function() {
      a.recieveFlower(flower);
    })
  }
}

xiaoming.sendFlower(b);

2. 图片占位加载例子

var myImage = (function(){
    var imgNode = document.createElement( 'img' );
    document.body.appendChild( imgNode );

    return function( src ){
        imgNode.src = src;
    }
})();

var proxyImage = (function(){
    var img = new Image;

    img.onload = function(){
        myImage( this.src );
    }

    return function( src ){
        myImage( 'file:// /C:/Users/svenzeng/Desktop/loading.gif' );
        img.src = src;
    }
})();

proxyImage( 'http:// imgcache.qq.com/music// N/k/000GGDys0yA0Nk.jpg' );

二、缓存代理

1. 缓存代理的例子——计算乘积
var proxyMult = (function(){
    var cache = {};
    return function(){
        var args = Array.prototype.join.call( arguments, ',' );
        if ( args in cache ){
            return cache[ args ];
        }
        return cache[ args ] = mult.apply( this, arguments );
    }
})();

 proxyMult( 1, 2, 3, 4 );    // 输出:24
 proxyMult( 1, 2, 3, 4 );    // 输出:24

其他代理模式

代理模式的变体

种类非常多,限于篇幅及其在JavaScript中的适用性,这里只简约介绍一下这些代理,就不一一详细展开说明了。

  • 防火墙代理:控制网络资源的访问,保护主题不让“坏人”接近。

  • 远程代理:为一个对象在不同的地址空间提供局部代表,在Java中,远程代理可以是另一个虚拟机中的对象。

  • 保护代理:用于对象应该有不同访问权限的情况。

  • 智能引用代理:取代了简单的指针,它在访问对象时执行一些附加操作,比如计算一个对象被引用的次数。

  • 写时复制代理:通常用于复制一个庞大对象的情况。写时复制代理延迟了复制的过程,当对象被真正修改时,才对它进行复制操作。写时复制代理是虚拟代理的一种变体,DLL(操作系统中的动态链接库)是其典型运用场景。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值