核心:代理对象中加入一个额外的(预先)操作(或存放一个队列),在适当的时机,执行本体

我们在编写业务代码的时候,不需要预先猜测是否需要使用代理模式。当真正发现不方便直接访问某个对象的时候,再编写代理不迟。

保护代理和虚拟代理

  • 保护代理:控制不同权限的对象对目标对象的访问
  • 虚拟代理:把一些开销很大的对象,延迟到真正需要它的时候才去创建

    代理的意义

    单一职责原则 一个引起变化的原因开放封闭原则
    给img节点设置src 和 图片预加载 被隔离在两个对象里。如果不再需要预加载,只需要改成请求本体。

代理和本体接口的一致性

  • 面向接口编程迎合依赖倒置原则,通过接口进行向上转型。 代理和本体将来可以被替换使用。

虚拟代理

虚拟代理实现图片预加载


第6章 代理模式 - 图1

防抖:虚拟代理

虚拟代理在惰性加载中的应用 —— 函数放到缓存队列

  • 合并Http请求:请求放到队列,2秒后统一发送
  • 控制台调用:打印需求放到队列,按键F2后再加载脚本并允许队列中的函数

    缓存代理 —— 开销大的运算结果提供暂时存储

  • 乘法计算

  • 分页ajax异步请求数据

第6章 代理模式 - 图2