代理模式和工厂模式

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

手写动态代理:
定义字节的classLoader,findClass方法读取生成的代理对象 P r o x y 0 定 义 自 己 的 I n v o c a t i o n H a n d l e r 定 义 i n v o k e 方 法 定 义 自 己 的 P r o x y 代 理 对 象 自 己 写 的 代 码 生 成 代 理 类 “ 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、工厂模式
简单工程模式:定义接口(规则),定义的多个实现类(实现给定的规则),当不同的数据时,返回不同类型的实现

你可能感兴趣的:(java)