杜撰23种设计模式--代理模式

静态代理:




静态代理模式,realSubject和Proxy 都要继承同一个接口。 可以通过实现同一个方法做到代理类代替被代理类的效果。
原方法有一个普通的sailBook方法。
在代理类中重写了sailBook并进行了方法的增强。在代理类中要留一个原有方法的引用,以此来运用被代理类的方法。
可以在生成代理类时,在构造器来生成被代理类的引用。
动态代理:
接口还是sailBook,原有普通方法也不变。


代理类进行了变化:

调用通过反射来调用:

首先要了解Proxy.newProxyInstance方法:
public static Object newProxyInstance(ClassLoader loader, Class<?>[] interfaces, InvocationHandler h)
ClassLoader loader: 类加载器,代理类是在运行时动态生成的,所以需要一个类加载器来加载,可以使用目标类的加载器。 所以targer.getClass().getClassLoader()
Class<?>[] Interface : 接口数组,指定了代理类要实现的接口列表。
InvocationHandler : 实现了InvocationHandler接口的代理类,代理对象被调用的时候会触发Invoke方法。
了解完这个方法也就应该清楚动态代理应该怎么写了. 首先需要有一个被代理类的引用(可以在构造器进行实例化),然后就是代理增强的具体方法invoke.在Proxy.newInstance后执行。
静态代理和动态代理的区别就在于传入的对象是否是动态的

浙公网安备 33010602011771号