代理模式(Proxy Pattern),Java 常见的设计模式之一,是 GoF 的 23 种设计模式中的一种结构型设计模式。 代理模式 是指客户端并不直接调用实际的对象,而是通过调用代理对象,来间接的调用实际的对象。代理对象 具备真实对象的功能,并代替真实对象完成相应操作,并能够在操作执行的前后,对操作进行增强处理(为真实对象提供代理,然后供其他对象通过代理访问真实对象)。 ~ 本篇内容包括:关于代理模式、代理(静态代理)实现 Demo、代理(动态代理)实现 Demo、代理(CGLIB 动态代理)实现 Demo
文章目录
1、关于代理模式
代理模式(Proxy Pattern),Java 常见的设计模式之一,是 GoF 的 23 种设计模式中的一种结构型设计模式。
代理模式 是指客户端并不直接调用实际的对象,而是通过调用代理对象,来间接的调用实际的对象。代理对象 具备真实对象的功能,并代替真实对象完成相应操作,并能够在操作执行的前后,对操作进行增强处理(为真实对象提供代理,然后供其他对象通过代理访问真实对象)。
Java 中的代理按照代理类生成时机不同又分为静态代理和动态代理。静态代理代理类在编译期就生成,而动态代理代理类则是在 Java 运行时动态生成。动态代理又有 JDK 代理和 CGLib 代理两种。
2、关于代理模式的构成
适配器模式一般包含三种角色:
3、关于代理模式的XML
4、关于代理模式的应用场景
当无法或不想直接引用某个对象或访问某个对象存在困难时,可以通过代理对象来间接访问。使用代理模式主要有两个目的:一是保护目标对象,二是增强目标对象。
5、关于代理模式的优缺点
# 代理模式的优点:
# 代理模式的缺点:
1、Demo 实现
# Subject 抽象主题
# RealSubject 真实主题
# Proxy 代理
2、Demo 测试
# 测试
1、动态代理
由于静态代理只能够对一种类型(接口)进行代理,如果想要对多种类型进行代理的话就需要创建多个代理类,为了弥补了静态代理的不足,从而出现了动态代理,使用反射技术实现
反射包 java.lang.reflect, 里面有三个类:InvocationHandler, Method, Proxy。
2、Demo 实现
# SellTickets 抽象主题
# TrainStation 真实主题
# ProxyFactory 代理工厂,用来创建代理对象
3、Demo 测试
# 测试
1、CGLIB 动态代理
同样是上面的案例,我们再次使用 CGLIB 代理实现。
如果没有定义 SellTickets 接口,只定义了 TrainStation(火车站类)。很显然 JDK 代理是无法使用了,因为 JDK 动态代理要求必须定义接口,对接口进行代理。
CGLIB 是一个功能强大,高性能的代码生成包。它为没有实现接口的类提供代理,为 JDK 的动态代理提供了很好的补充。
2、Maven 坐标
3、Demo 实现
4、Demo 测试
我的博客即将同步至腾讯云开发者社区,邀请大家一同入驻:https://cloud.tencent.com/developer/support-plan?invite_code=28bx1ao8mslcw
版权声明:
本文来源网络,所有图片文章版权属于原作者,如有侵权,联系删除。
本文网址:https://www.mushiming.com/mjsbk/10604.html