当我第一次看到代理模式的定义是,脑海中浮现的一句代码就是const that = this;
,我们通过that
来代理this
的访问,虽然没有体现控制的意味,但体现了代理的意思。
在日常的开发工作之中,我对于代理模式的理解是:对对象的操作添加过滤的手段。
之前在工作中遇到一个场景:平台管理系统需要去维护各子系统的公共数据(CommonData),各子系统在使用时去拉取公共数据,但是这样拉取公共数据其实会是比较大的开销,因为公共数据的变化比较缓慢,时效性比较低,我们可以通过代理拉取公共数据的函数来操作。代码如下:
// 拉取公共数据函数
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;
};
####使用场景
- 远程代理:为一个对象在不同的地址空间提供局部代表,这样可以隐藏一个对象存在不同地址空间的事实
- 虚拟代理:根据需要创建开销很大的对象,通过它来存放实例化需要很长时间的真实对象
- 安全代理:用来控制,真实对象访问时的权限
- 智能指引:值当调用真实的对象时,代理处理另外一些事情
我的经验
在前端中,我遇到或使用代理模式的场景有:
- 需要对某些类、方法的使用做一层过滤
- 需要监听某些类、方法的使用并做处理
- 某些DOM懒加载的情况(比如图片懒加载)
参考
大话设计模式 -- 程杰
个人博客
北落师门
常见问题FAQ
- 免费下载或者VIP会员专享资源能否直接商用?
- 本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
- 提示下载完但解压或打开不了?
- 找不到素材资源介绍文章里的示例图片?
- 模板不会安装或需要功能定制以及二次开发?
发表评论
还没有评论,快来抢沙发吧!