代理模式
一:代理模式
定义:为其他对象提供一种代理以控制对这个对象的访问。在某些情况下,一个对象不适合或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。
例子:房东与房屋中介。房东关心,租房者只要签订合同,缴纳房租就可以租房。但是房东出租房屋需要发布广告、带领租房人来看房屋这些繁琐的事。如果这些事情交给中介,房东就可以专注于自己关注的事。
简言之:代理模式就是让”中介”做一些用户不关心但必须要做的事。
代理类和委托类必须实现同一个接口。
二:模拟代理模式
模拟代理~~~
让业务方法执行前后加入一些辅助功能。
作为一个”优秀的”猿类当然不能那么low了。
三:静态代理
实现步骤:
I:自定义接口
II:实现类实现接口,代理实现接口、并提供before和after方法
接口:
接口实现类:
代理类:
Test 类
运行结果
四:动态代理[JDK动态代理]
静态代理可以解决问题,但是如果有多个业务需要代理,需要声明很多的接口与相关的代理类。[这么写代码不优雅,代码需要进一步简化。]
实现InvocationHandler接口
测试类
可以看出newProxyInstance方法的三个参数:
1:ClassLoader
2:该实现的的所有接口
3:动态代理对象
为了避免到处都是Proxy.newProxyInstance方法将这个方法封装、重构。
五:Glib动态代理[解决JDK动态代理不能解决问题]
JDK动态代理不能够代理一个没有任何接口的类。
它是一个再运行期间动态生成字节码的工具,也就是生成动态代理类。