代理模式和工厂模式

本文详细探讨了代理模式的两种实现方式——JDK动态代理和CGLIB动态代理,强调了JDK动态代理需要接口的约束,而CGLIB则无需基于接口。同时,文章还介绍了工厂模式,阐述了如何通过定义接口和实现类来应对不同数据场景下的对象创建需求。

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

1、代理模式(1、代理类和被代理对象;2、被代理对象不想去执行的方法;3、代理)
1.1、JDK动态代理(字节码重组)
代理类实现接口 invocationHandler ,实现invoke 方法,和获取getInstance()方法获取代理对象$Proxy0
h.invoke()通过接口调用被代理对象的方法
jdk动态代理,必须有接口,实现类实现接口中的为实现的 方法。

手写动态代理:
定义字节的classLoader,findClass方法读取生成的代理对象Proxy0定义自己的InvocationHandler定义invoke方法定义自己的Proxy代理对象自己写的代码生成代理类“Proxy0 定义自己的InvocationHandler 定义invoke方法 定义自己的Proxy 代理对象 自己写的代码生成代理类“Proxy0InvocationHandlerinvokeProxyProxy0”,有generate生成代码的方法,读取源代码,编译,用ClassLoader把字节码加载到jvm 中。返回代理对象(一般是通过constructor),
1.2、cglib动态代理
不用是基于接口的代理
代理类 implements MethodInterceptor,实现intercepter方法,
cglib是利用 Enhancer enhancer = new Enhancer();
enhancer.setSuperclass(target.getClass());//被代理类
enhancer.setCallback(this);
return enhancer.create();
利用以上代码获取被代理类的子类,so在interceptor 方法中,要用 method.invokeSupper(o,args);执行代理方法

2、工厂模式
简单工程模式:定义接口(规则),定义的多个实现类(实现给定的规则),当不同的数据时,返回不同类型的实现

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值