当前位置: 首页 > news >正文

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

文章目录

  • 前言
  • 介绍
  • 例子
  • 场景
  • 优缺点
  • 标题五
  • 后言

前言

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)

场景

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>

优缺点

优点

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

缺点

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

标题五

后言

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

相关文章:

  • 【Java 进阶篇】JQuery 遍历 —— For 循环的奇妙之旅
  • react hook ts 实现 列表的滚动分页加载,多参数混合混合搜索
  • ctf之流量分析学习
  • 沉浸式航天vr科普馆VR太空主题馆展示
  • Beautiful Soup爬取数据html xml
  • 查询ip地址
  • Java版B/S架构云his医院信息管理系统源码(springboot框架)
  • 0基础学习VR全景平台篇第121篇:认识视频剪辑软件Premiere
  • 酷开系统 酷开科技,将家庭娱乐推向新高潮
  • 为什么LDO一般不用在大电流场景?
  • AWD比赛中的一些防护思路技巧
  • 设计模式 -- 工厂模式(Factory Pattern)
  • es的介绍以及使用
  • vuex使用(如何安装和全局引用可看我的博客Vue的安装以及相关插件)
  • 迈瑞医疗,用科技创新解构医疗器械全球法则
  • JS 中的深拷贝与浅拷贝
  • 【译】理解JavaScript:new 关键字
  • 002-读书笔记-JavaScript高级程序设计 在HTML中使用JavaScript
  • idea + plantuml 画流程图
  • Javascripit类型转换比较那点事儿,双等号(==)
  • JavaWeb(学习笔记二)
  • LeetCode刷题——29. Divide Two Integers(Part 1靠自己)
  • MySQL QA
  • PyCharm搭建GO开发环境(GO语言学习第1课)
  • React as a UI Runtime(五、列表)
  • React Transition Group -- Transition 组件
  • ReactNativeweexDeviceOne对比
  • SpiderData 2019年2月25日 DApp数据排行榜
  • Spring声明式事务管理之一:五大属性分析
  • Sublime Text 2/3 绑定Eclipse快捷键
  • vue数据传递--我有特殊的实现技巧
  • webpack项目中使用grunt监听文件变动自动打包编译
  • 包装类对象
  • 如何优雅的使用vue+Dcloud(Hbuild)开发混合app
  • 算法-图和图算法
  • 异步
  • ​VRRP 虚拟路由冗余协议(华为)
  • #微信小程序(布局、渲染层基础知识)
  • $refs 、$nextTic、动态组件、name的使用
  • (2.2w字)前端单元测试之Jest详解篇
  • (C#)一个最简单的链表类
  • (二)hibernate配置管理
  • (附源码)springboot人体健康检测微信小程序 毕业设计 012142
  • (附源码)基于SSM多源异构数据关联技术构建智能校园-计算机毕设 64366
  • (三)uboot源码分析
  • (四)Android布局类型(线性布局LinearLayout)
  • (五)c52学习之旅-静态数码管
  • (一)appium-desktop定位元素原理
  • (原)本想说脏话,奈何已放下
  • (转)nsfocus-绿盟科技笔试题目
  • (转)大型网站的系统架构
  • *(长期更新)软考网络工程师学习笔记——Section 22 无线局域网
  • ... fatal error LINK1120:1个无法解析的外部命令 的解决办法
  • ./configure、make、make install 命令
  • .desktop 桌面快捷_Linux桌面环境那么多,这几款优秀的任你选