代理模式(Proxy Pattern):给某一个对象提供一个代理,并由代理对象控制对原对象的引用。代理模式的英文叫做 Proxy 或 Surrogate,它是一种对象结构型模式。
代理模式有三个关键要素,它们分别是:
- 主题(Subject):定义“操作/活动/任务”的接口类。
- 真实主题(RealSubject):真正完成“操作/活动/任务”的具体类。
- 代理主题(ProxySubject):代替真实主题完成“操作/活动/任务”的代理类。
代理模式的优点
- 代理模式能够协调调用者和被调用者,在一定程度上降低了系统的耦合度。
- 可以灵活地隐藏被代理对象的部分功能和服务,也增加额外的功能和服务。
代理模式的缺点
- 由于在客户端和真实主题之间增加了代理对象,因此有些类型的代理模式可能会造成请求的处理速度变慢。
- 实现代理模式需要额外的工作,有些代理模式的实现非常复杂。
场景
- 不想或者不能直接引用一个对象时
- 想对一个对象的功能进行加强时
- 各种特殊用途的代理:远程代理、虚拟代理、保护(Protect or Access)代理、Cache 代理等
图示
代码实现
静态代理
1 | interface TicketSell |
动态代理
1 | interface TicketSell |