简介
在代理模式(Proxy Pattern)中,一个类代表另一个类的功能。这种类型的设计模式属于结构型模式。
在代理模式中,我们创建具有现有对象的对象,以便向外界提供功能接口。
角色
抽象角色:通过接口或抽象类声明真实角色实现的业务方法。
代理角色:实现抽象角色,是真实角色的代理,通过真实角色的业务逻辑方法来实现抽象方法,并可以附加自己的操作。
真实角色:实现抽象角色,定义真实角色所要实现的业务逻辑,供代理角色调用。
图解
优点
真实的角色就是实现实际的业务逻辑,不用关心其他非本职责的事务,通过后期的代理完成一件完成事务,附带的结果就是编程简洁清晰。
代理对象可以在客户端和目标对象之间起到中介的作用,这样起到了中介的作用和保护了目标对象的作用。
高扩展性
缺点
由于在客户端和真实主题之间增加了代理对象,因此有些类型的代理模式可能会造成请求的处理速度变慢。
实现代理模式需要额外的工作,有些代理模式的实现非常复杂。
应用场景
应用场景 | 具体描述 | 目的 |
---|---|---|
远程代理 | 为一个对象在不同的地址空间提供局部的代表时 | 隐藏一个对象存在于不同地址空间的事实;远程机器可能具有更好的计算机性能与处理速度,可以快速响应并处理客户端请求。 |
虚拟代理 | 通过使用一个小的对象代理一个开销大的对象 | 减少系统的开销 |
保护代理 | 控制目标对象的访问,给不同用户提供不同的访问权限 | 控制对真实对象的访问权限 |
智能引用代理 | 在访问对象时附加额外操作 | 在不影响对象类的情况下,在访问对象时进行更多的操作 |
区别
代理模式与适配器模式:适配器模式是为了将一个类的接口转换成客户希望的另外一个接口,而代理模式不能改变代理类的接口。
代理模式与装饰器模式:装饰器模式为了增强功能,而代理模式是为了加以控制。