• 前端设计模式之【代理模式】


    前言

    hello world欢迎来到前端的新世界


    😜当前文章系列专栏:前端设计模式
    🐱‍👓博主在前端领域还有很多知识和技术需要掌握,正在不断努力填补技术短板。(如果出现错误,感谢大家指出)🌹
    💖感谢大家支持!您的观看就是作者创作的动力

    介绍

    是为一个对象提供一个代用品或占位符,以便控制对它的访问,充当客户端和目标对象之间的中间层,控制对目标对象的访问。前端代理可以用于各种不同的场景,包括安全控制、性能优化和简化复杂性等方面。

    使用前端代理模式时,客户端并不直接与目标对象进行交互,而是通过代理来间接访问目标对象。代理可以对客户端的请求进行过滤、验证和一些额外的操作,然后再将请求传递给目标对象。这种方式可以有效地保护目标对象,同时也可以在访问前后实现一些附加的操作,如权限验证、缓存、延迟加载等。

    例子

    假设当A 在心情好的时候收到花,小明表白成功的几率有60%,而当A 在心情差的时候收到花,小明表白的成功率无限趋近于0。小明跟A 刚刚认识两天,还无法辨别A 什么时候心情好。如果不合时宜地把花送给A,花被直接扔掉的可能性很大,这束花可是小明吃了7 天泡面换来的。但是A 的朋友B 却很了解A,所以小明只管把花交给B,B 会监听A 的心情变化,然后选择A 心情好的时候把花转交给A,代码如下:

    let Flower = function() {}
    let xiaoming = {
      sendFlower: function(target) {
        let flower = new Flower()
        target.receiveFlower(flower)
      }
    }
    let B = {
      receiveFlower: function(flower) {
        A.listenGoodMood(function() {
          A.receiveFlower(flower)
        })
      }
    }
    let A = {
      receiveFlower: function(flower) {
        console.log('收到花'+ flower)
      },
      listenGoodMood: function(fn) {
        setTimeout(function() {
          fn()
        }, 1000)
      }
    }
    xiaoming.sendFlower(B)
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26

    场景

    HTML元素事件代理

    <ul id="ul">
      <li>1</li>
      <li>2</li>
      <li>3</li>
    </ul>
    <script>
      let ul = document.querySelector('#ul');
      ul.addEventListener('click', event => {
        console.log(event.target);
      });
    </script>
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    优缺点

    优点

    • 代理模式能将代理对象与被调用对象分离,降低了系统的耦合度。代理模式在客户端和目标对象之间起到一个中介作用,这样可以起到保护目标对象的作用
    • 代理对象可以扩展目标对象的功能;通过修改代理对象就可以了,符合开闭原则;

    缺点

    处理请求速度可能有差别,非直接访问存在开销

    标题五

    后言

    创作不易,要是本文章对广大读者有那么一点点帮助 不妨三连支持一下,您的鼓励就是博主创作的动力

  • 相关阅读:
    Node.js 是怎么找到模块的?
    065:mapboxGL在一个图层中随机添加100个标记(marker)
    《SpringBoot篇》05.超详细日志配置介绍
    【数据结构】P1 数据结构是什么、算法怎样度量
    SXSSFWorkbook-MinIo-大数据-流式导出
    vulfocus——opensns命令执行(CNVD-2021-34590)
    督查督办管理系统在企业管理中起到的作用
    无涯教程-JavaScript - BETA.INV函数
    【油猴脚本】00006 案例 Tampermonkey油猴脚本自定义表格列名称,自定义表格表头,自定义表格的thead里的td
    【C/C++】优雅而具体地向学生解释栈空间的分配与利用
  • 原文地址:https://blog.csdn.net/weixin_68537796/article/details/134424247