杜撰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后执行。

 

静态代理和动态代理的区别就在于传入的对象是否是动态的

posted @ 2023-10-22 23:56  NobodyHero  阅读(19)  评论(0)    收藏  举报