设计模式之代理模式

发布于 2023-04-07 20:08:54 字数 1320 浏览 69 评论 0

代理模式是当调用方不方便直接访问一个对象或者不满足需要的时候,提供一个替身对象来控制对这个对象的访问。调用方实际上访问的是替身对象。替身对象对请求做出一些处理之后,再把请求转交给本体对象。

应用场景

比如我们平时用的代理软件就是代理模式。比如我们做图片懒加载就可以用到代理模式。

实现

我们以图片懒加载为例,实现一下代理模式。如下代码只会在 id 为 img1 的元素出现在视口才会加载图片。

如果没有出现在视口,是不会加载的:

function lazyloadImg(node, src) {
  var intersectionObserver = new IntersectionObserver(function(entries) {
    if (entries[0].intersectionRatio > 0) return node.src = src;
  });
  // start observing
  intersectionObserver.observe(node);
}

lazyloadImg(document.querySelector('#img1'), 'http://lucifer.ren/imgs/a.png')

如果不适用代理模式的话,代码可能是:

// 在某个时候
document.querySelector('#img1').src = 'http://lucifer.ren/imgs/a.png';

另外我们设置可以在代理中增加一些逻辑判断,比如图片如果很小就直接发,如果比较大就等会。 或者预先展示一个占位图片,等到图片加载之后再替换。

我们可以发现,通过使用代理模式,我们的代码很容易松耦合,帮助我们写出更加内聚的代码。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

文章
评论
27 人气
更多

推荐作者

櫻之舞

文章 0 评论 0

弥枳

文章 0 评论 0

m2429

文章 0 评论 0

野却迷人

文章 0 评论 0

我怀念的。

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文