目的:客户不方便或者不能访问某一个对象的时候可以通过代理对对象进行访问,代理起到中介的作用
优点:职责清晰;符合开闭原则,利于扩展
代理模式的实现!
静态代理:
1)分为代理者和被代理者
2)代理者和被代理者具有相同的功能(实现相同的接口)
3)代理者能访问被代理者(代理者包含被代理者对象)
4)代理者执行功能时会调用被代理者的功能,同时进行功能的扩展
缺点:每个代理类只能代理一个业务,如果要代理更多的业务,需要定义大量新的代理类。
动态代理:静态代理能做的动态代理都能做,并且可以动态生成代理类和代理对象,不需要手动编写
JDK动态代理 实现反射包里的InvocationHandler接口
代理类核心:1)被代理者对象;
2)传入被代理者对象返回代理者对象的方法
Proxy.newProxyInstance(object.getClass().getClassLoader(),object.getClass().getInterfaces(),this)
动态生成代理者对象,参数1是类加载器,为了加载被代理对象的类;2是对象实现的接口数组( 局 限性:被代理者必须要实现接口),3是InvocationHandler实现对象
3)重写invoke方法
method.invoke(object,args); method 是指被代理者需要调用的方法 ;args 调用方法需要的参数
原文:https://www.cnblogs.com/wffzk/p/13156819.html