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


    前言

    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

    优缺点

    优点

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

    缺点

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

    标题五

    后言

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

  • 相关阅读:
    无涯教程-JavaScript - ISODD函数
    Java创建Document对象有哪些方法呢?
    Apache shiro RegExPatternMatcher 权限绕过漏洞 (CVE-2022-32532)
    Chisel-Strike:一款功能强大的.NET异或XOR加密CobaltStrike Aggressor实现
    Redis Java整合
    怎样优雅地增删查改(七):按用户查询
    Matlab中clear,close all,clc功能详细说明
    智能运维|AIRIOT智慧光伏管理解决方案
    【TcaplusDB知识库】TcaplusDB-tcapulogmgr工具介绍(二)
    【软件工程】金管局计算机岗位——软件测试的分类(⭐⭐⭐⭐)
  • 原文地址:https://blog.csdn.net/weixin_68537796/article/details/134424247