代理模式定义:为其他对象提供一种代理以控制对这个对象的访问。代理对象起到中介的作用,可去掉功能服务或增加额外的服务。
代理模式中能实现多个场景,例如远程调用【远程通信】、保护代理【权限管理】、虚拟代理、智能引用代理【常用】模式等场景
代理分为静态代理和动态代理
静态代理
静态代理:代理和被代理对象在代理之前是确定的,他们都实现相同的接口或者继承相同的抽象类.
静态代理实现方法:
1.继承法:代理类直接【继承】被代理类,实现其原有方法,并添加一些额外功能【但会让代理类无限膨胀下去】
2.聚合方法:代理类实现【相同的功能接口:很重要,事项相同接口】,并在类中声明一个被代理类的对象(类似封装),通过内部对象实现其原有方法,并添加额外功能【比继承更适合代理,分析如下】
聚合:从一个类中调用另一类中的对象
可见,在聚合方法实现代理模式,灵活很多,不同代理也可以进行相互代理(传递),互相组合。但以下只是对Car的代理,如果来了一辆大卡车和自行车呢?那么需要建多个代理类,那么有100个代理类呢,也要一个一个建吗??能不能用一个大代理类同时实现对大卡车和汽车等车的代理呢???
JDK动态代理
AOP面向切面编程,在不改变原有类基础上,增加一些额外的逻辑。