动态静态代理设计模式

动态静态代理设计模式

静态代理和装饰者模式

静态代理就是在不继承(或实现)一个类的基础上去“增强”一个类中的某个方法 听起来跟装饰者模式有点像 但是装饰者模式是运行时增强(在调用这个方法时传入被增强类)
动态静态代理设计模式
动态静态代理设计模式
而静态代理的话是编译时增强(编译时增强类就要被确定)

动态静态代理设计模式
动态静态代理设计模式
可以看到静态代理在编译时就会确定要增强的类 而装饰者模式的话是在调用此类时才传入参数 (确定增强那个类) 可以看到不管是装饰者模式还是静态代理都需要一个类去继承被增强类的接口 美中多少有些许不足 。

动态代理

动态代理利用反射在运行时创建代理类 我们就可以不需要使用代理类 然后参数里面的调用监听器方法 只要监听到 方法调用 就会回到监听器里面的回调函数 执行方法 方法参数1:被增强类的类加载器 (类名.class.getClassLoader()) 参数2:被代理类实现的接口 (被代理类.class.intefaces) 参数3:new InvocationHandler() 这就是执行处理类 到时候具体实现在这里实现

动态静态代理设计模式
动态静态代理设计模式

p,walk 在这里是一个回调函数 ,程序只要执行到p,walk 就回到上面方法执行invoke方法 这里就可以对方法进行一个增强
所以在动态代理里,代理对象所属的类是不需要存在的。

在下萌新一枚 如果有不对的地方还请多多指教 谢谢