在纷繁复杂的程序设计世界里,我们总是需要尽可能的考虑到各种情况。而有这么一种机制,我们可以将我们指责中的一部分隔离开来,让一个所谓的代理来帮我们解决一部分和主体业务关系不大的业务,从而让我们能更专心的设计我们的主体业务。这就是代理模式的初衷,也是很多流行框架的应用。——个人理解。
一、代理模式(Proxy)的定义
为其他对象提供一种代理以控制对这个对象的访问。在某些情况下,一个对象不合适或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。
二、应用场景
- 远程代理:也就是为一个对象在不同的地址空间提供局部代表。这样可以隐藏一个对象存在不同地址空间的事实。例如:WebService、RPC、RMI(Remote Method Invocation)等。
- 虚拟代理:是根据需要创建开销很大的对象。通过它来存放实例化需要很长时间的真实对象。例如:利用虚拟代理来优化页面的打开速度。
- 安全代理:用来控制真实对象访问时的权限。一般用户对象应该在不同访问权限的时候。
- 智能指引:是指当调用真实的对象时,代理处理另外一些事情。例如:Spring AOP、Hibernate等。
注:以上的代理并非只是简单的代理模式的应用,而是使用了下一篇介绍的动态代理的概念。但是思想其实都是一样的。