1、 定义:为其它对象提供一种代理以控制对这个对象的访问。在某些情况下,一个对象不适合或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。
2、 类图:代理对象和被代理对象拥有共同父接口,代理对象依赖被代理对象。
3、 优点:
- 代理模式能将代理对象与真正被调用的对象分离,在一定程度上降低了系统的耦合度;
- 代理模式能在客户端和目标对象之间起到了一个中介作用,这样可以起到保护目标对象的作用。代理对象也可以对目标对象调用之前或调用之后进行其他操作。
4、 缺点:
- 增加系统复杂度;
- 在客户端和目标对象增加一个代理对象,会造成请求处理速度变慢;
5、 适用场景:
- 远程代理:为一个对象在不同的地址空间提供局部代理,这样可以隐藏一个对象在于不同地址空间的事实;
- 虚拟代理:是根据需要创建开销很大的对象,通过它来存放实例化需要很长时间的真实对象;
- 安全代理:用来控制真实对象访问时的权限,一般用于对象有不同访问权限;
- 防火墙代理:保护目标,不让恶意用户接近;
- 智能指针:是指当调用真实的对象时,代理处理另一些事;
- 延迟加载:用代理模式实现延迟加载的一个经典应用就是Hibernate框架里的load方法;