设计模式的艺术-代理模式

news2025/1/23 9:57:27

结构性模式的名称、定义、学习难度和使用频率如下表所示:

1.如何理解代理模式

  1. 代理模式(Proxy Pattern):给某一个对象提供一个代理,并由代理对象控制对原对象的引用。代理模式是一种对象结构型模式

  2. 代理模式类型较多,其中远程代理、虚拟代理、保护代理等在软件开发中应用非常广泛。在Java RMI、EJB、Web Service、Spring AOP等技术和框架中都使用了代理模式。

2.常见的代理模式有哪些?

  1. 远程代理:为一个位于不同地址空间的对象提供本地代表。比如,在分布式系统中,客户端通过远程代理来访问远程服务器上的对象。

  2. 虚拟代理:根据需要创建开销很大的对象。例如,在图片加载的场景中,先显示一个占位图,真正需要显示图片时再加载实际的图片对象。

  3. 保护代理:基于不同权限控制对原始对象的访问。比如,在一个数据库访问的场景中,原始对象是数据库操作的接口,而保护代理会在接收到访问请求时,检查请求者的身份和权限。如果请求者没有足够的权限执行某些数据库操作(如删除数据、修改关键配置等),保护代理会拒绝该请求,只允许执行其权限范围内的操作(如读取数据、添加非关键记录等)。

  4. 智能引用代理:在访问对象时执行额外的操作,例如引用计数、记录访问日志等。

3.如何理解代理模式中的远程代理?

  1. 主要用于解决在不同的地址空间(通常是在不同的机器或进程中)访问对象的问题。

  2. 比如,一个在线银行系统,服务器端有处理账户操作的对象。客户端通过远程代理发送请求,如查询余额、转账等,远程代理将请求序列化后通过网络发送到服务器,服务器处理后将结果返回,远程代理再将结果反序列化并提供给客户端。

  3. 远程代理隐藏了网络通信、数据序列化等复杂的底层细节,让客户端感觉就像是在本地直接操作对象一样。

4.如何理解代理模式中的虚拟代理?

  1. 用于在需要时才创建或加载 “昂贵” 的对象,以提高性能和资源利用效率。

  2. 例如我们正在浏览一个网页,页面上有很多图片。但一次性加载所有图片会消耗大量的网络带宽和时间,导致页面加载缓慢。这时就可以使用虚拟代理。

  3. 虚拟代理的核心思想是延迟对象的创建或初始化,直到真正需要的时候,从而避免不必要的资源消耗和性能下降。

5.代理模式的优缺点

  1. 优点

    1. 可以在不修改原始对象的情况下,为对象添加额外的功能,如日志记录、权限控制等,符合开闭原则。

    2. 降低耦合度:代理模式能够协调调用者和被调用者,在一定程度上降低了系统的耦合度,满足迪米特法则。

    3. 保护隐私:保护代理可以隐藏原始对象的一些敏感信息和操作,保护其不被不当访问。

    4. 提高性能:例如虚拟代理可以实现延迟加载,从而提高系统的性能和响应速度。

  1. 缺点

    1. 增加复杂性:引入代理对象会增加系统的复杂性,特别是在多层代理的情况下。

    2. 由于在客户端和真实主题之间增加了代理对象,因此有些类型的代理模式可能会造成请求的处理速度变慢,例如保护代理。

6.代理模式的适用场景

  1. 远程对象访问:当需要访问位于远程服务器上的对象时,使用远程代理来隐藏网络通信的细节。

  2. 虚拟资源加载:如前面提到的图片、大型文件或复杂数据的延迟加载,使用虚拟代理来优化性能。

  3. 权限控制:对某些敏感对象或操作进行权限验证,只有符合权限的请求才能通过保护代理访问实际对象。

  4. 日志记录与监控:在对象方法调用前后进行日志记录或性能监控,通过代理来添加这些额外功能。

  5. 智能引用:例如实现对象的引用计数,通过代理来管理对象的生命周期。

以上内容为根据书本内容配合搜索引擎整理得来,目的是为了学习,要是有侵权的情况发生,请联系我,我会立即予以删除,谢谢!

一起成长,人生是马拉松,可以跑得慢,但一定要在路上。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2280839.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Spring Boot整合Thymeleaf、JDBC Template与MyBatis配置详解

本文将详细介绍如何在Spring Boot项目中整合Thymeleaf模板引擎、JDBC Template和MyBatis,涵盖YAML配置、依赖版本匹配、项目结构设计及代码示例。 一、版本兼容性说明 Spring Boot版本与Java版本对应关系 Spring Boot 2.x:支持Java 8、11(推…

【博客之星】2024年度创作成长总结 - 面朝大海 ,春暖花开!

没关系的,大家都会做错选择,会 莫名其妙掉眼泪,走在路上会突然崩溃, 但这并不影响我们去看看晚霞, 再次爱上这个世界。 面朝大海 ,春暖花开! about meReviewLife about me 现在我是一名24级计算机类的…

StyleMaster: Stylize Your Video with Artistic Generation and Translation 论文解读

目录 一、概述 二、相关工作 1、图像风格化 2、视频风格化 三、StyleMaster 1、创建对比数据集 2、提取全局描述子 3、局部描述和全局描述结合 4、时间和风格质量的运动适配器 5、Gray Tile ControlNet 四、实验 一、概述 Our StyleMaster demonstrates superior vi…

c++进阶---c++三大特性之一---多态

多态的简单介绍:是一种动态的访问函数,比如:你定义了一个一个人类和一个学生类,当你传入的是学生类的时候,你需要有购物优惠,这种情境下用多态就很适用。 1.简单的多态使用: 1.1构造多态的条件…

安卓程序作为web服务端的技术实现(二):Room 实现数据存储

已经实现web服务器安卓程序作为web服务端的技术实现:AndServer 实现登录权限拦截-CSDN博客 现在需要和正常web项目类似,那么就需要操作数据库 一般web项目都是选择较为重型的数据库如MySQL,SQL server等 这里是安卓项目,我目前…

如何使用Python脚本将本地项目上传到 GitHub

前言 这里我们通过创建一个新的github仓库,来测试我们的脚本能否上传我们本地的项目,并且进行更新。首先你需要先安装 Git,关于这部分我好像没有记录过,这里我搜索看了一下,这篇博客写的Git安装详解应该是比较齐全的&…

Day 15 卡玛笔记

这是基于代码随想录的每日打卡 222. 完全二叉树的节点个数 给你一棵 完全二叉树 的根节点 root ,求出该树的节点个数。 完全二叉树 的定义如下:在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值&#x…

IO进程----进程

进程 什么是进程 进程和程序的区别 概念: 程序:编译好的可执行文件 存放在磁盘上的指令和数据的有序集合(文件) 程序是静态的,没有任何执行的概念 进程:一个独立的可调度的任务 执行一个程序分配资…

【Postgres_Python】使用python脚本将多个PG数据库合并为一个PG数据库

需要合并的多个PG数据库表个数和结构一致,这里提供一种思路,选择sql语句insert插入的方式进行,即将其他PG数据库的每个表内容插入到一个PG数据库中完成数据库合并 示例代码说明: 选择一个数据库导出表结构为.sql文件&#xff08…

微软预测 AI 2025,AI Agents 重塑工作形式

1月初,微软在官网发布了2025年6大AI预测,分别是:AI模型将变得更加强大和有用、AI Agents将彻底改变工作方式、AI伴侣将支持日常生活、AI资源的利用将更高效、测试与定制是开发AI的关键以及AI将加速科学研究突破。 值得一提的是,微…

《Java核心技术 卷II》获取Web数据提交表单数据

提交表单数据 了解即可,直接上案例 package 第4章网络.post;import java.io.IOException; import java.io.InputStream; import java.io.PrintWriter; import java.io.Reader; import java.net.CookieHandler; import java.net.CookieManager; import java.net.Co…

Spring Boot AOP实现动态数据脱敏

依赖&配置 <!-- Spring Boot AOP起步依赖 --> <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-aop</artifactId> </dependency>/*** Author: 说淑人* Date: 2025/1/18 23:03* Desc…

JavaScript —— 变量与运算符

变量与常量 let&#xff1a;用来定义变量&#xff0c;可以只声明不定义&#xff1b; 例如&#xff1a; <script type"module">let a; // 只声明不定义let x 2, name "kitty"; // 定义若干个变量let d { // 定义一个对象&#xff0c;类似于p…

YOLO-cls训练及踩坑记录

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言 一、模型训练 二、测试 三、踩坑记录 1、推理时设置的imgsz不生效 方法一&#xff1a; 方法二&#xff1a; 2、Windows下torchvision版本问题导致报错 总结 前…

Android BitmapShader简洁实现马赛克,Kotlin(一)

Android BitmapShader简洁实现马赛克&#xff0c;Kotlin&#xff08;一&#xff09; 这一篇&#xff0c; Android使用PorterDuffXfermode模式PorterDuff.Mode.SRC_OUT橡皮擦实现马赛克效果&#xff0c;Kotlin&#xff08;3&#xff09;-CSDN博客 基于PorterDuffXfermode实现马…

全球化趋势与中资企业出海背景

1. 全球化趋势与中资企业出海背景 1.1 全球经济格局变化 全球经济格局正经历深刻变革&#xff0c;新兴经济体崛起&#xff0c;全球产业链重塑&#xff0c;中资企业出海面临新机遇与挑战。据世界银行数据&#xff0c;新兴市场和发展中经济体在全球 GDP 中占比已超 40%&#xff…

无人机在城市执法监管中的应用:技术革新与监管挑战

随着科技的不断进步&#xff0c;无人机技术在城市管理中的应用越来越广泛。无人机以其灵活性、高效性和低成本的优势&#xff0c;正在逐渐成为城市执法监管的得力助手。本文将探讨无人机在城市执法监管中的应用现状、技术优势以及面临的挑战。 无人机技术在城市执法监管中的应用…

总结6..

背包问题的解决过程 在解决问题之前&#xff0c;为描述方便&#xff0c;首先定义一些变量&#xff1a;Vi表示第 i 个物品的价值&#xff0c;Wi表示第 i 个物品的体积&#xff0c;定义V(i,j)&#xff1a;当前背包容量 j&#xff0c;前 i 个物品最佳组合对应的价值&#xff0c;同…

【2024年 CSDN博客之星】我的2024年创作之旅:从C语言到人工智能,个人成长与突破的全景回顾

我的2024年创作之旅&#xff1a;从C语言到人工智能&#xff0c;个人成长与突破的全景回顾 引言 回望2024年&#xff0c;我不仅收获了技术上的成长&#xff0c;更收获了来自CSDN平台上无数粉丝、朋友以及网友们的支持与鼓励。在这条创作之路上&#xff0c;CSDN不仅是我展示技术成…

等变即插即用图像重建

大家读完觉得有帮助记得关注和点赞&#xff01;&#xff01;&#xff01; 摘要 即插即用算法为解决反问题成像问题提供了一个流行的框架&#xff0c;该框架依赖于通过降噪器隐式定义图像先验。这些算法可以利用强大的预训练降噪器来解决各种成像任务&#xff0c;从而避免了在每…