代理模式

一,静态代理

针对于网上大多数静态代理写成装饰者模式(装饰着模式和静态代理的区别https://blog.csdn.net/weixin_35609314/article/details/78913635),做了一下总结:
1,被代理的对象必须是一个类,且必须有父接口或者父类;
2,被代理的类需要增强的方法必须在父类或者父接口中出现;
3,静态代理的使用目的是为了保护和隐藏目标对象,所以代理类的无参构造器中就创建目标对象。

二,缺点:

1,因为代理对象需要与目标对象实现一样的接口,所以会有很多代理类,类太多
2,如果代理对象实现的是接口,父接口中增加方法,目标对象与代理对象都要维护
动态代理方式可以解决上述缺点

三,动态代理

也叫jdk代理,java底层封装了实现细节,格式固定,代码简单。直接调用java.lang.reflect.Proxy的静态方法newProxyInstance即可
1,被代理的对象必须是一个类,且必须有父接口;
2,被代理的类需要增强的方法必须在父接口中出现;
static Object newProxyInstance(ClassLoader loader, Class[] interfaces,InvocationHandler h )

四,参数:

1,ClassLoader loader,:指定当前目标对象使用类加载器,获取加载器的方法是固定的
2,Class[] interfaces,:目标对象实现的接口的类型,使用泛型方式确认类型
3,InvocationHandler h:事件处理,执行目标对象的方法时,会触发事件处理器的方法,会把当前执行目标对象的方法作为参数传入

你可能感兴趣的:(代理模式)