6.设计模式之代理模式

代理模式:为其余对象提供一种代理以控制对这个对象的访问

当我第一次看到代理模式的定义是,脑海中浮现的一句代码就是const that = this;,咱们经过that来代理this的访问,虽然没有体现控制的意味,但体现了代理的意思。前端

在平常的开发工做之中,我对于代理模式的理解是:对对象的操做添加过滤的手段git

以前在工做中遇到一个场景:平台管理系统须要去维护各子系统的公共数据(CommonData),各子系统在使用时去拉取公共数据,可是这样拉取公共数据其实会是比较大的开销,由于公共数据的变化比较缓慢,时效性比较低,咱们能够经过代理拉取公共数据的函数来操做。代码以下:github

// 拉取公共数据函数设计模式

const getCommonData = async (type) => {
 return await Ajax(type);
};
​
// 代理函数
const CommonDataMap = new Map();
const getCommonDataProxy = async (type) => {
 let data = CommonDataMap.get(type);
 if (!data) {
 data = await getCommonData(type);
 CommonDataMap.set(type, data);
 }
​
 return data;
};

使用场景

  1. 远程代理:为一个对象在不一样的地址空间提供局部表明,这样能够隐藏一个对象存在不一样地址空间的事实
  2. 虚拟代理:根据须要建立开销很大的对象,经过它来存放实例化须要很长时间的真实对象
  3. 安全代理:用来控制,真实对象访问时的权限
  4. 智能指引:值当调用真实的对象时,代理处理另一些事情

个人经验

在前端中,我遇到或使用代理模式的场景有:安全

  • 须要对某些类、方法的使用作一层过滤
  • 须要监听某些类、方法的使用并作处理
  • 某些DOM懒加载的状况(好比图片懒加载)
    • *
参考

大话设计模式 -- 程杰async

我的博客

北落师门函数

相关文章
相关标签/搜索