1、代理模的功能:
代理模式是通过创建一个代理对象,用这个代理对象去代表真实的对象,客户端得到这个代理对象后,对客户端并没有什么影响,就跟得到了真实对象一样来使用。
当客户端操作这个代理对象的时候,实际上功能最终还是会由真实的对象来完成,只不过是通过代理操作的,也就是客户端操作代理,代理操作真正的对象。
正是因为有代理对象夹在客户端和被代理 的真实对象中间,相当于一个中转,那么在中转的时候 就有很多花招可以玩,比如判断一下权限,如果没有足够的权限,那么就不给你了中转了,等等。
2、代理的分类:
事实上代理又被分成多种,大致有如下一些。
- 虚代理:根据需要来创建开销很大的对象,该对象只有在需要的时候才会被真正的创建。
- 远程代理:用来在不同的地址空间代表同一个对象,这个不同的地址空间可以是在本机,也可以在其他机器上。在Java里面最典型的就是RMI技术。
- copy-on-write代理:在客户端操作的时候,只有对象确实改变了,才会真的拷贝(克隆)一个目标对象,算是虚代理的一个分支。
- 保护代理:控制对原始对象的访问,如果有需要,可以给不同的用户提供不同的访问权限,以控制他们对原始对象的访问。
- Cache代理(缓存代理):为那些昂贵操作的结果提供临时的存储空间,以便多个客户端可以共享这些结果。
- 防火墙代理:保护对象不被恶意用户访问和操作。
- 同步代理:使多个用户能够同时访问目标对象而没有冲突。
- 智能指引:在访问对象时执行一些附加操作,比如,对指向实际对象的引用计数、第一次引用一个持久化对象时,将它装入内存等。
3、代理模式的本质:
控制对象访问。
4、代理模式调用顺序示意图:
5、何时选代理模式
建议在如下情况选用代理模式。
- 需要为一个对象在不同的地址空间提供局部代表的时候,可以使用远程代理。
- 需要安装需要创建开销很大的对象的时候,可以使用虚代理。
- 需要控制对原始对象的访问的时候,可以使用保护代理。
- 需要在访问对象执行一些附加操作的时候,可以使用智能引入代理。