设计模式---代理模式

代理模式是一种设计模式,用于在不修改原有对象的基础上,通过创建一个代理对象来控制对目标对象的访问。代理类和被代理类通常具有相同的接口或继承自同一父类。静态代理在编译时确定,优点是提高了业务类的重用性,但当接口方法增多时,维护成本增加。而动态代理则在运行时动态生成,减少了代码维护的复杂度,JDK的动态代理主要利用InvocationHandler和Proxy类实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

定义:为某个对象提供一个代理,以控制对这个对象的访问。 代理类和委托类有共同的父类或父接口,这样在任何使用委托类对象的地方都可以用代理对象替代。代理类负责请求的预处理、过滤、将请求分派给委托类处理、以及委托类执行完请求后的后续处理。

静态代理:代理和被代理对象在代理之前是确定的。他们都实现了相同的接口或者继承了相同的类。

静态代理类优缺点
优点:业务类只需要关注业务逻辑本身,保证了业务类的重用性。这是代理的共有优点。
缺点:
1)代理对象的一个接口只服务于一种类型的对象,如果要代理的方法很多,势必要为每一种方法都进行代理,静态代理在程序规模稍大时就无法胜任了。
2)如果接口增加一个方法,除了所有实现类需要实现这个方法外,所有代理类也需要实现此方法。增加了代码维护的复杂度。

动态代理:动态代理类的源码是在程序运行期间由JVM根据反射等机制动态的生成,所以不存在代理类的字节码文件。代理类和委托类的关系是在程序运行时确定。

JDK动态代理

这里写图片描述
Java动态代理类主要涉及InvocationHandler和Proxy两个类。

动态代理实现步骤:
1.创建一个实现InvocationHandler接口的类,它必须实现invoke方法。
2.创建被代理的类和接口
3.调用Proxy的newProxyInstance静态方法,创建一个代理类
4.通过代理类调用方法

Invaocation实现类如下:
这里写图片描述

调用类如下:
这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值