代理模式介绍

代理模式(Proxy Pattern)是一种常用的设计模式,它属于结构型设计模式,用于为其他对象提供一个代理以控制对该对象的访问。在代理模式中,一个代理类代表一个真实主题(也称为目标对象或被代理对象),并为真实主题的操作提供额外的处理功能,例如预处理请求、过滤条件、延迟加载、统计耗时、权限校验、日志记录等。

代理模式主要有以下几个角色:

  1. **Subject(抽象主题)**: 这是一个接口或抽象类,声明了代理和真实主题都需要实现的一组方法,客户端就是通过这个接口与代理或真实主题交互。

  2. **RealSubject(真实主题)**: 这是实现了Subject接口的实际对象,它包含真实的业务逻辑。

  3. **Proxy(代理)**: 代理同样实现了Subject接口,并持有真实主题的引用。当客户端调用代理的方法时,代理可以选择自行处理请求,也可以将请求转发给真实主题,并可能在转发前后添加额外的处理逻辑。

在Java中,代理模式有以下两种主要实现形式:

  • **静态代理**:在编译期间就已经确定代理类,代理类和真实主题类通常在同一源码文件中显式定义,代理类手动实现了与真实主题相同的接口,并在接口方法的实现中加入额外功能。

  • **动态代理**:

  • **JDK动态代理**:利用Java反射机制和InvocationHandler接口在运行时动态创建代理类,这种情况下不需要提前编写代理类,只需提供一个实现了InvocationHandler接口的类,该类会在invoke方法中处理方法调用的全过程。

  • **CGLIB动态代理**:CGLIB库基于字节码生成技术,能够在运行时动态生成一个继承自目标类的子类作为代理类,通过覆盖父类方法来实现代理功能。相比于JDK动态代理,CGLIB更适用于那些没有接口或需要代理类具有与被代理类相同继承关系的情况。

代理模式的应用场景非常广泛,例如在数据库连接池中,连接对象就是一个代理对象,它可以管理真实的数据库连接资源;在远程调用框架中,本地的远程代理对象负责封装网络通信细节并转发请求至远程服务器端的真实对象。

相关推荐
wuqingshun3141599 天前
什么是代理模式?一般用在什么场景?
java·mysql·代理模式
我登哥MVP9 天前
走进 Gang of Four 设计模式:代理模式
设计模式·代理模式
折哥的程序人生 · 物流技术专研11 天前
Java 23 种设计模式:从踩坑到精通 | 番外:代理 vs 装饰器 —— Spring AOP 到底用了哪个?
java·代理模式·装饰器模式·java面试·java设计模式·springaop·从踩坑到精通
初学者,亦行者12 天前
算法设计与分析3:贪心法 - 求解最短路径问题(TSP)
算法·代理模式
2501_9160074715 天前
iPad 怎么抓包 从代理模式到暴力抓包的操作方法
android·ios·小程序·uni-app·代理模式·iphone·ipad
越甲八千15 天前
代理模式和适配器模式区别
代理模式·适配器模式
AI人工智能+电脑小能手19 天前
【大白话说Java面试题 第156题】【06_Spring篇】第16题:Spring 用到了哪些设计模式?
java·spring·设计模式·代理模式·工厂模式
许彰午1 个月前
36_Java设计模式之代理模式
java·设计模式·代理模式
devilnumber1 个月前
静态代理 & 动态代理:实战运用 + 场景区别 + 怎么选
java·开发语言·代理模式
devilnumber1 个月前
想真正吃透 + 灵活运用 Java 代理模式
java·开发语言·代理模式