代理模式简介

devtools/2025/1/11 15:26:14/

        代理模式是一种设计模式,它允许我们通过一个中介对象间接访问目标对象,这个中介对象称为“代理”。代理模式的关键在于,它在不改变目标对象代码的前提下,通过引入代理对象来增加额外的功能控制对目标对象的访问

代理模式的基本概念

目标对象(Subject)


目标对象是实际执行业务逻辑的对象,它定义了客户端希望执行的操作。目标对象可以是任何类型的对象,例如远程服务、数据库连接或文件。


代理对象(Proxy)


代理对象是一个中介,它具有与目标对象相同的接口,这样客户端就可以像使用目标对象一样使用代理对象。代理对象负责预处理客户端的请求,之后可能会将请求转发给目标对象,也可能自行处理请求。

客户端(Client)


客户端是使用代理对象和目标对象的代码。客户端通过代理对象来间接访问目标对象,通常情况下,客户端并不知道自己正在使用代理而不是目标对象。

代理模式的类型

静态代理


静态代理在编译时就已经确定,代理类通常是由程序员手动编写的。静态代理类和目标对象实现相同的接口,并在内部维护一个目标对象的引用。

动态代理


动态代理是在程序运行时动态创建的,它不需要显式定义代理类。在Java中,可以通过java.lang.reflect.Proxy类和java.lang.reflect.InvocationHandler接口来创建动态代理。

代理模式的操作流程

1、创建目标对象

首先创建一个目标对象,它实现了客户端需要调用的业务逻辑。


2、创建代理对象

接着创建一个代理对象,它也实现了与目标对象相同的接口。在静态代理中,代理对象通常会有一个目标对象的引用。
 

3、客户端请求

客户端通过代理对象的接口发送请求。客户端通常不知道它正在与代理对象交互,而是认为它正在直接与目标对象交互。
 

4、代理处理请求

代理对象接收到请求后,可以执行以下操作:


预处理:在将请求转发给目标对象之前,代理对象可以执行一些预处理操作,如权限检查、日志记录等。
 

转发请求:如果代理对象决定将请求转发给目标对象,它会调用目标对象的相应方法。
 

后处理:在目标对象处理完请求后,代理对象可以执行一些后处理操作,如清理资源、事务管理等。
 

5、返回结果

代理对象将目标对象的处理结果返回给客户端,或者返回代理对象自身处理的结果。

代理模式的优势

增强功能:

可以在不修改目标对象的前提下,通过代理对象来增加额外的功能。

控制访问:

代理对象可以控制对目标对象的访问,例如实现权限控制、事务管理等。

解耦:

代理模式将客户端与目标对象解耦,客户端只需要知道代理对象即可,这有助于系统的维护和扩展。

代理模式的缺点

性能开销:

由于引入了代理对象,请求的处理可能会变慢,因为需要额外的预处理和后处理。

代码复杂度:

引入代理模式可能会增加系统的复杂度,因为需要额外编写代理类和处理逻辑。


        通过以上描述,我们可以理解代理模式的核心思想是“间接访问”,它通过引入代理对象来间接访问目标对象,从而在不修改目标对象的前提下,增加额外的功能或控制访问。


http://www.ppmy.cn/devtools/149640.html

相关文章

VUE3 一些常用的 npm 和 cnpm 命令,涵盖了修改源、清理缓存、修改 SSL 协议设置等内容。

以下是一些常用的 npm 和 cnpm 命令,涵盖了修改源、清理缓存、修改 SSL 协议设置等内容。 npm 常用命令 1. 修改 npm 源 更改为淘宝的 npm 镜像源(可以提高安装速度): bash复制代码 npm config set registry https://registry…

使用docker-compose安装Redis的主从+哨兵模式

必看 本文是一主二从一哨兵模式;其余的单机/集群/多哨兵模式的话,不在本文... 本文的环境主要是:应用app在本地,redis在云服务器上; 图解 图如下:这个图很重要; 之所以要这样画图&#xff0…

Hive sql执行文件合并配置参数

HIVE自动合并输出的小文件的主要优化手段为:HIVE将会启动一个独立的map-reduce任务进行输出文件的merge。 set hive.merge.mapfiles true: 在只有map的作业结束时合并小文件, set hive.merge.mapredfiles true: 在Map-Reduce的任…

Postman接口测试05|实战项目笔记

目录 一、项目接口概况 二、单接口测试-登录接口:POST 1、正例 2、反例 ①姓名未注册 ②密码错误 ③姓名为空 ④多参 ⑤少参 ⑥无参 三、批量运行测试用例 四、生成测试报告 1、Postman界面生成 2、Newman命令行生成 五、token鉴权(“…

业务日志设计

当一个项目足够大的时候,我们需要将统计系统完全独立出去,那么就无法避免数据采集的问题,我们可以在业务触发处增加log日志来记录当前变化的原始数据,提供统计系统进行采集 设计一个统计系统的日志记录机制时,主要需要…

ubuntu22.04 的录屏软件有哪些?

在Ubuntu 22.04上,有几款适合做视频直播和录屏的软件: 1. OBS Studio (Open Broadcaster Software) 功能:OBS Studio 是最常用的开源直播和录屏软件,支持视频录制、直播流式传输,并且有强大的插件支持,能…

uniApp 在真机环境下报错:包时未添加cemera模块,请参考https://ask.dcloud.net.cn/article/283

文章目录 问题分析 问题 uniApp 在真机环境下报错:包时未添加cemera模块,请参考https://ask.dcloud.net.cn/article/283 分析 打开提示的网址:https://ask.dcloud.net.cn/article/283,根据网址中的提示我们配置打包时的环境

Go语言的计算机基础

Go语言的计算机基础 引言 随着计算机科学技术的迅速发展,编程语言的演进也迎来了新的高峰。其中,Go语言(或称Golang)因其高效性、简洁性和易用性而备受关注。Go语言由谷歌于2007年开发,并在2009年正式发布。它旨在解…