前言
代理模式,从这个名字其实就能得出一个内容,肯定不是直接操作某个类,而是通过设置代理人来帮助沟通,或者说做事的。
一、代理设计模式的含义和缺点
代理模式的含义:
代理模式是指:当某一个类或者对象,不方便直接与外界进行连接,或者说传递数据时,这时候我们就需要设置一个新的类或者对象来作为该类的代理者,代替它完成某些功能,或者说操作。
代理模式的缺点:
- 代理模式会造成系统设计中类的数量增加
- 在客户端和目标对象之间增加一个代理对象,会造成请求处理速度变慢;
- 增加了系统的复杂度
注意:可以使用动态代理模式来解决这些问题
二、代理模式的结构
这时候一般创建的是静态代理类,因为是在用户创建对象时就已经存在了,这样的话就会有缺点,因为有的时候我们根本不清楚,具体是为哪个类在设置代理类,这时候就可以使用动态代理模式,而动态代理模式的本质其实是用反射的机制来完成操作的。
三、动态代理代码实现
动态代理主要分为两大类:基于接口的动态代理,基于类的动态代理
- 基于接口—JDK动态代理
- 基于类:cglib
- java字节码实现:javasist
代理角色代码:
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
//要求该类实现InvocationHandler接口
public class ProxyInvocationHandler implements InvocationHandler {
//组合要被代理的接口(因为不清楚具体的类,所有用object 来代替类的属性)
private Object target;
public void setTarget(Object target){
this.target=target;
}
//生成得到代理类
public Object getProxy(){
return Proxy.newProxyInstance(this.getClass().getClassLoader(),
target.getClass().getInterfaces(),this);
}
//处理代理实例,并返回结果
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
return null;
}
}
总结
说了一下代理角色的的含义和它类与类之间的组合关系,同时也讲解了代理类的代码。