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

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

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.rhkb.cn/news/8007.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

K8S极简教程(4小时快速学会)

1. K8S 概览 1.1 K8S 是什么 K8S官网文档:https://kubernetes.io/zh/docs/home/ 1.2 K8S核心特性 服务发现与负载均衡:无需修改你的应用程序即可使用陌生的服务发现机制。存储编排:自动挂载所选存储系统,包括本地存储。Secret和…

python3+TensorFlow 2.x(五)CNN

目录 CNN理解 code实现人脸识别 数据集准备: code实现 模型解析 结果展示 结果探讨 基于vgg16的以图搜图 数据准备 图库database 检索测试集datatest code实现 code解析 结果展示 CNN理解 卷积神经网络(CNN)是深度学习中最强大…

(一)HTTP协议 :请求与响应

前言 爬虫需要基础知识,HTTP协议只是个开始,除此之外还有很多,我们慢慢来记录。 今天的HTTP协议,会有助于我们更好的了解网络。 一、什么是HTTP协议 (1)定义 HTTP(超文本传输协议&#xff…

FPGA实现任意角度视频旋转(完结)视频任意角度旋转实现

本文主要介绍如何基于FPGA实现视频的任意角度旋转,关于视频180度实时旋转、90/270度视频无裁剪旋转,请见本专栏前面的文章,旋转效果示意图如下: 为了实时对比旋转效果,采用分屏显示进行处理,左边代表旋转…

如何移植ftp服务器到arm板子?

很多厂家提供的sdk,一般都不自带ftp服务器功能, 需要要发人员自己移植ftp服务器程序。 本文手把手教大家如何移植ftp server到arm板子。 环境 sdk:复旦微 Buildroot 2018.02.31. 解压 $ mkdir ~/vsftpd $ cp vsftpd-3.0.2.tar.gz ~/vs…

【阅读笔记】基于整数+分数微分的清晰度评价算子

本文介绍的是一种新的清晰度评价算子,整数微分算子分数微分算子 一、概述 目前在数字图像清晰度评价函数中常用的评价函数包括三类:灰度梯度评价函数、频域函数和统计学函数,其中灰度梯度评价函数具有计算简单,评价效果好等优点…

LabVIEW 保存文件 生产者/消费者设计

LabVIEW 保存文件 生产者/消费者设计 简介生产消费模式设计结构 简介 主从模式的数据通信是利用全局变量、局域变量或共享变量实现的,由于这些变量的每次复制都是原始数据的一个副本,占据了大量的空间。实际上,只需要使用一部分缓冲区作为数…

网络安全 | F5-Attack Signatures-Set详解

关注:CodingTechWork 创建和分配攻击签名集 可以通过两种方式创建攻击签名集:使用过滤器或手动选择要包含的签名。  基于过滤器的签名集仅基于在签名过滤器中定义的标准。基于过滤器的签名集的优点在于,可以专注于定义用户感兴趣的攻击签名…

宏_wps_宏修改word中所有excel表格的格式_设置字体对齐格式_删除空行等

需求: 将word中所有excel表格的格式进行统一化,修改其中的数字类型为“宋体, 五号,右对齐, 不加粗,不倾斜”,其中的中文为“宋体, 五号, 不加粗,不倾斜” 数…

项目集成RabbitMQ

文章目录 1.common-rabbitmq-starter1.创建common-rabbitmq-starter2.pom.xml3.自动配置1.RabbitMQAutoConfiguration.java2.spring.factories 2.测试使用1.创建common-rabbitmq-starter-demo2.目录结构3.pom.xml4.application.yml5.TestConfig.java 配置交换机和队列6.TestCon…

Shotcut新版来袭,新增HSL滤镜、硬件编码,剪辑更流畅

Shotcut 是一款功能强大、完全免费且开源的多平台视频编辑工具,适用于 Windows、macOS 和 Linux 系统。作为一款专业的视频编辑软件,它不仅支持数百种音频和视频格式的直接编辑,还提供了无需导入即可进行原生编辑的便捷功能。Shotcut 的核心优…

K8s运维管理平台 - xkube体验:功能较多

目录 简介Lic安装1、需要手动安装MySQL,**建库**2、启动命令3、[ERROR] GetNodeMetric Fail:the server is currently unable to handle the request (get nodes.metrics.k8s.io qfusion-1) 使用总结优点优化 补充1:layui、layuimini和beego的详细介绍1.…

BAHD酰基转移酶对紫草素的手性催化-文献精读105

Two BAHD Acyltransferases Catalyze the Last Step in the Shikonin/Alkannin Biosynthetic Pathway 两个BAHD酰基转移酶催化了紫草素/左旋紫草素生物合成途径中的最后一步 一个BAHD酰基转移酶专门催化紫草素的酰基化,而另一个BAHD酰基转移酶则仅催化紫草素的对映…

STM32完全学习——RT-thread在STM32F407上移植

一、写在前面 关于源码的下载,以及在KEIL工程里面添加操作系统的源代码,这里就不再赘述了。需要注意的是RT-thread默认里面是会使用串口的,因此需要额外的进行串口的初始化,有些人可能会问,为什么不直接使用CubMAX直接…

单片机内存管理剖析

一、概述 在单片机系统中,内存资源通常是有限的,因此高效的内存管理至关重要。合理地分配和使用内存可以提高系统的性能和稳定性,避免内存泄漏和碎片化问题。单片机的内存主要包括程序存储器(如 Flash)和数据存储器&a…

“AI质量评估系统:智能守护,让品质无忧

嘿,各位小伙伴们!今天咱们来聊聊一个在现代社会中越来越重要的角色——AI质量评估系统。你知道吗?在这个快速发展的时代,产品质量已经成为企业生存和发展的关键。而AI质量评估系统,就像是我们的智能守护神,…

人工智能:从基础到前沿

目录 目录 1. 引言 2. 人工智能基础 2.1 什么是人工智能? 2.2 人工智能的历史 2.3 人工智能的分类 3. 机器学习 3.1 机器学习概述 3.2 监督学习 3.3 无监督学习 3.4 强化学习 4. 深度学习 4.1 深度学习概述 4.2 神经网络基础 4.3 卷积神经网络&#…

Centos7系统php8编译安装ImageMagick/Imagick扩展教程整理

Centos7系统php8编译安装ImageMagick/Imagick扩展教程整理 安装php8安装ImageMagick1、下载ImageMagick2、解压并安装3、查看是否安装成功 安装imagick扩展包 安装php8 点我安装php8 安装ImageMagick 1、下载ImageMagick wget https://www.imagemagick.org/download/ImageMa…

基于微信阅读网站小程序的设计与实现(LW+源码+讲解)

专注于大学生项目实战开发,讲解,毕业答疑辅导,欢迎高校老师/同行前辈交流合作✌。 技术范围:SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容:…

51单片机入门_02_C语言基础0102

C语言基础部分可以参考我之前写的专栏C语言基础入门48篇 以及《从入门到就业C全栈班》中的C语言部分,本篇将会结合51单片机讲差异部分。 课程主要按照以下目录进行介绍。 文章目录 1. 进制转换2. C语言简介3. C语言中基本数据类型4. 标识符与关键字5. 变量与常量6.…