设计模式4—代理模式【结构型】

https://www.cnblogs.com/loveyt/p/11410593.html  或  https://www.cnblogs.com/loveyt/p/11410593.html(推荐)

一、虚拟代理:

  1、案例

// 创建一个本体对象
var myImage = (function(){
  // 创建标签
  var imgNode = document.createElement( 'img' );
  // 添加到页面
  document.body.appendChild( imgNode );
  return {
    // 设置图片的src
    setSrc: function( src ){
      // 更改src
      imgNode.src = src;
    }
  }
})();

// 创建代理对象
var proxyImage = (function(){
  // 创建一个新的img标签
  var img = new Image;
  // img 加载完成事件
  img.onload = function(){
    // 调用 myImage 替换src方法
    myImage.setSrc( this.src );
  }
  return {
    // 代理设置地址
    setSrc: function( src ){
      // 预加载 loading
      myImage.setSrc( 'file:// /C:/Users/svenzeng/Desktop/loading.gif' );
      // 赋值正常图片地址
      img.src = src;
    }
  }
})();

proxyImage.setSrc( 'http:// image.qq.com/music/photo/k/000GGDys0yA0Nk.jpg' );

  2、代理的意义:

     代理将 两个功能分开,本体执行主要 或 必要的 功能,而代理执行 可有可无的功能。当代理 的功能不需要时,不用改函数里面的代码。

     只要 改成 请求 本体,而不是请求 代理对象即可。

// 预加载
proxyImage.setSrc( 'http:// image.qq.com/music/photo/k/000GGDys0yA0Nk.jpg' );

// 不用预加载
myImage.setSrc( 'http:// image.qq.com/music/photo/k/000GGDys0yA0Nk.jpg' );

二、缓存代理

原文地址:https://www.cnblogs.com/wfblog/p/14395620.html