代理模式简介

server/2025/1/11 22:19:52/

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

代理模式的基本概念

目标对象(Subject)


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


代理对象(Proxy)


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

客户端(Client)


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

代理模式的类型

静态代理


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

动态代理


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

代理模式的操作流程

1、创建目标对象

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


2、创建代理对象

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

3、客户端请求

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

4、代理处理请求

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


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

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

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

5、返回结果

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

代理模式的优势

增强功能:

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

控制访问:

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

解耦:

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

代理模式的缺点

性能开销:

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

代码复杂度:

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


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


http://www.ppmy.cn/server/157592.html

相关文章

npm run 运行项目报错:Cannot resolve the ‘pnmp‘ package manager

尝试使用 npm 运行一个项目,但是在解析 pnmp 包管理器时遇到了问题。这通常意味着项目可能配置错误,或者可能误输入了命令。 解决方法: 确认是否有拼写错误。通常情况下,应该是 npm 而不是 pnmp。 检查项目的 package.json 文件&…

弹性云服务器和普通服务器的区别

云服务器随着云计算的快速发展,也受到了各个企业的广泛使用,随着业务需求的不断变化,云服务器的类型也在不断进行细化,其中弹性云服务器逐渐受到企业的欢迎,那么弹性云服务器和普通服务器究竟有什么区别呢?…

Linux内核 -- RTC 驱动的注册方式

Linux 内核中 RTC 驱动的注册方式 在 Linux 内核中,RTC(Real-Time Clock)驱动的注册可以通过多种方式实现,以下整理了常见的注册方式及其注意事项。 1. 使用 devm_rtc_device_register 这是注册 RTC 驱动的最常用方法&#xff…

将光源视角的深度贴图应用于摄像机视角的渲染

将光源视角的深度贴图应用于摄像机视角的渲染是阴影映射(Shadow Mapping)技术的核心步骤之一。这个过程涉及到将摄像机视角下的片段坐标转换到光源视角下,并使用深度贴图来判断这些片段是否处于阴影中。 1. 生成光源视角的深度贴图 首先&…

景芯SOC设计实战

终身辅导、一对一辅导,手把手教您完成SoC全流程设计,从入门到进阶,带您掌握SoC芯片架构、算法、设计、验证、DFT、后端及低功耗全流程!直播视频不定期升级!让您快速超越同龄人! 景芯团队主打文档服务器实战…

Go语言中的接收器(Receiver)详解

在 Go 语言中,接收器(Receiver) 是指在方法声明中与方法绑定的对象。它是 Go 语言实现面向对象编程(OOP)特性的核心之一。接收器的作用是将方法绑定到某个类型的实例(值或者指针),让…

多租户架构是什么?

多租户架构(Multi-Tenant Architecture)是一种软件架构模型,在这种架构下,一个应用程序可以同时为多个不同的“租户”提供服务,每个租户的数据和设置是隔离的,但都共享同一份软件和硬件资源。每个租户可以视…

《操作系统真象还原》第十二章(一) —— 系统调用

本章节所有代码托管在miniOS 章节任务介绍 任务简介 上一节,我们实现了用户进程的创建,至此,我们成功将操作系统的使用权给用户进行了开放,用户至此可以创建进程然后实现自己的功能,但用户实现的功能最终还是要在操…