1.概述
代理:其实就是代替处理的意思。又称委托模式,为目标对象提供(包装)了一个代理,这个代理可以控制对目标对象的访问。外界不直接访问目标对象,而是访问代理对象,再由代理对象调用目标对象。
2.静态代理
代理对象持有目标对象的一个句柄,
其实就是将目标对象的引用作为代理对象的成员变量。
类关系:
代码示例:
接口:
目标对象:
代理对象:
测试:
缺点:
因为要对目标对象的每个方法都进行静态编码包装,所以目标对象中有多少个方法,静态代理对象中就需要有多少个方法。目标对象中方法过多的时候,代理对象就会显的臃肿,也不便于维护和拓展。
3.动态代理
动态代理,产生一个被处理器全面监听的代理对象出来,这个代理对象的每次方法调用都会被处理器拦截下来。静态代理中的处理逻辑全部抽象在处理器中。
代码示例:
接口:
目标对象:
处理器:
测试:
动态代理的代理对象必须实现接口,是因为代理模式本质上是给目标对象裹上一层外壳,而这个外壳肯定要和代理对象的形状一样,因此在创建代理对象的时候要给出一个模板,即要传给其一个接口。