意图:为其他对象提供一种代理以控制对这个对象的访问。
何时使用:想在访问一个类时做一些控制。
如何解决:增加中间层。
优点: 1、职责清晰。 2、高扩展性。 3、智能化。4、协调调用者和被调用者,一定程度上降低耦合
缺点: 1、由于在客户端和主题之间增加了代理对象,因此可能会造成请求的处理速度变慢。 2、有些代理模式的实现非常复杂。
使用场景:
- [
- 远程代理:控制远程访问对象
- 虚拟代理:作为创建开销大的对象的代表
- 保护代理:基于权限控制对对象的访问
- 防火墙代理:控制网络资源的访问
- 智能引用代理:主题被引用时进行额外动作
]()
静态代理与动态代理的区别
- 静态代理只能通过手动完成代理操作,如果被代理类增加新的方法,代理类需要同步新增,违背开闭原则。
- 动态代理采用在运行时动态生成代码的方式,取消了对被代理类的扩展限制,遵循开闭原则。
- 若动态代理要对目标类的增强逻辑扩展,结合策略模式,只需要新增策略类便可完成,无需修改代理类的代码。
注意事项: 1、和适配器模式的区别:适配器模式主要改变所考虑对象的接口,而代理模式不能改变所代理类的接口。 2、和装饰器模式的区别:装饰器模式为了增强功能,而代理模式是为了加以控制。