代理模式简介

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

代理模式的基本概念

目标对象(Subject)

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

代理对象(Proxy)

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

客户端(Client)

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

代理模式的类型

静态代理

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

动态代理

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

代理模式的操作流程

1、创建目标对象

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

2、创建代理对象

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

3、客户端请求

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

4、代理处理请求

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

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

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

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

5、返回结果

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

代理模式的优势

增强功能:

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

控制访问:

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

解耦:

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

代理模式的缺点

性能开销:

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

代码复杂度:

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

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

相关推荐
panzer_maus2 天前
工厂模式、代理模式与单例模式的介绍
java·设计模式·代理模式
花月C3 天前
线性动态规划(Linear DP)
算法·动态规划·代理模式
散峰而望3 天前
【基础算法】动态规划从入门到进阶:记忆化搜索、线性 DP、LIS/LCS 一网打尽
c++·后端·算法·github·深度优先·动态规划·代理模式
淡忘旧梦3 天前
ChatGPT回答白屏
人工智能·chatgpt·代理模式
会编程的土豆3 天前
【数据结构与算法】动态规划
数据结构·c++·算法·leetcode·代理模式
范纹杉想快点毕业5 天前
C语言编程实战宝典:550例精解·涵盖基础语法·数组指针·位运算·递归·贪心·动态规划
c语言·动态规划·代理模式
想不明白的过度思考者5 天前
SpringAOP:Java 三大代理模式:从静态代理到 JDK & CGLIB 动态代理
java·开发语言·代理模式
※DX3906※7 天前
SpringBoot之旅5| 快速上手SpringAOP、深入刨析动态/静态两种代理模式
java·数据库·spring boot·后端·spring·java-ee·代理模式
无籽西瓜a7 天前
【西瓜带你学设计模式 | 第九期 - 代理模式】代理模式 —— 静态与动态代理实现、优缺点与适用场景
java·后端·设计模式·软件工程·代理模式
江畔何人初9 天前
iptables 和 IPVS 代理模式 Service 的区别
linux·运维·服务器·网络·云原生·kubernetes·代理模式