1.对代理模式的理解
代理模式的定义:为其他对象提供一种代理以控制对这个对象的访问。在某些情况下,一个对象不适合或者不能直接引用另一个对象,而代理对象可以在客户类和目标对象之
间起到中介作用。 百度百科《代理模式》
- 使用代理对象,是为了在不修改目标对象的基础上,增强主业务逻辑;客户类真正想要访问的是目标对象,但客户类真正可以访问的对象是代理对象。客户类对目标对象的访问是通过访问代理对象来实现的。
- 我们可以用生活中的“代理律师”来理解“代理模式”:
- 当事人打官司,由于当事人并不非常了解官司过程,需要聘请律师来替他完成整个打官司的所有事务。所以整个打官司的过程,其实都是由律师完成,当事人均可不出现;
- 打官司(主业务),当事人(目标对象),律师(代理对象);律师用自己的专业知识增强主业务;
- 需要注意的点:
1.当事人与代理律师是为同一件事努力——代理类和目标类要实现同一接口,即业务接口;
2.打官司所有的具体事务都是通过律师完成——客户类对目标类的调用均是通过代理类完成的;
3.在打官司过程中需要当事人完成某些工作时,律师通知当事人,并出谋划策——代理类的执行既执行了对目标类的增强业务逻辑,又调用了目标类的主业务逻辑。
2.代理模式分类
根据代理关系建立的时间不同,可以将代理分为两类:静态代理和动态代理;如同法律顾问和代理律师。
静态代理:
静态代理,代理类是在程序运行之前就定义好的;类似于企业与企业的法律顾问,法律顾问是在企业打官司之前就已经存在的。
静态代理
动态代理:
动态代理,程序在整个运行过程中根本不存在目标类的代理类,目标对象的代理对象是在程序运行时由jvm根据反射等机制由代理生成工具(如代理工厂类)动态生成的;类似
于当事人需要打官司时临时聘请代理律师。
常用的动态代理:
JDK动态代理
CGLIB动态代理