代理模式

来源:互联网 发布:牵引变电所接地网优化 编辑:程序博客网 时间:2024/06/06 20:22

客户端需要某对象时其实他并不关心是否是该对象,只要能提供相同功能就可以,因此可以给他提供一个代理。

 

为什么要使用代理

原因可以有很多中,比如:

  1. 对象创建成本较大且不一定需要使用
  2. 对象在远程主机
  3. 目标对象功能不足

这些情况都可以使用代理模式

 

简单代理模式

使用组合方式,代理实现与被代理对象相同接口并保有一个被代理对象。

 

因为他拥有和被代理对象相同的接口,因此调用方可以使用它,而此时我们就可以在代理中添加逻辑操作,比如spring aop就可以通过代理完成。或者用代理完成懒加载,只在对象真正需要时才进行创建,这也是hibernate的懒加载实现方式。

 

动态代理

通过实现InvocationHandler接口,编写动态代理类,将对对象的方法调用全部放在了invoke方法中通过反射执行。

 

可以通过Java提供的动态代理方便的生成代理类,并且可以编写代理工厂

 

spring中的aop与简单的动态代理区别在于它更进一步,它使用配置文件决定代理中执行什么操作,达到了更彻底的解耦,当需要扩充功能时无需修改代理工厂,只需要修改配置文件即可