代理模式(Proxy)
定义
Provide a surrogate or placeholder for another object to control access to it.
(为其他对象提供一种代理,以控制对这个对象的访问。)
说明
代理模式又称为委托模式,是一种使用频率非常高的模式,在其他设计模式中也会采用委托模式,比如状态模式,策略模式,访问者模式等在本质上也是一种特殊场合下的委托模式。而且在日常应用中也能找到代理模式的影子,比如vpn代理。比如我们经常接触的AOP(切面编程)就是通过动态代理实现的,有类似于Spring AOP 和 AspectJ这样的优秀工具。
静态代理模式类图:
强制指定代理类图:
动态代理类图(基于JVM):
结构
代理模式的角色:
Proxy (代理):提供了与真实主题相同的接口,它里面包含真实主题的引用,可以对真实主题访问,控制,增强等。
Subject (抽象主题):通过接口或抽象类对真实主题和代理对象实现业务的约束。
RealSubject (真实主题):被代理的对象,实现了抽象主题的方法,代理对象指向的对象,最终要被引用的对象。
代理模式的优点
- 代理模式在客户端与目标对象之间起到中介的作用,可以有效保护目标对象的信息,实现了系统的安全性。
- 代理对象可以扩展目标对象的功能。
- 代理对象可以过滤不安全的访问,从而起到保护目标对象的作用。
- 代理模式在一定程度上将调用者与实现分离,降低了系统的耦合性,提高了扩展性。
代理模式的应用
代理模式的优点非常多,运用也非常多,比如nginx、Apache这种反向代理的服务,切面编程等等。