也称为:Surrogate
适用场景
远程代理:为一个远程的对象提供一个本地代表
虚拟代理:在需要的时候才会创建一个比较昂贵的对象。
保护代理:控制对原对象的访问权限。在原对象需要不同的访问权限是比较有用
智能引用:是一个指针的代替,来完成额外的任务。
结构
参与对象
代理者
- 维护一个让代理访问主体对象的指针。
- 提供一个和主题对象一样的接口,这样代理对象就能替代主体对象
- 控制对主体对象的访问权限,也可以创建或删除主体对象
- 远程代理:负责编码一个请求以及它的参数,以便于把请求发送给远程的真实的主体对象
- 虚拟代理:缓存额外关于主体对象的信息,以便于延迟访问它。
- 保护代理:检查调用者的访问权限
主体对象
- 为主体对象和代理定义一个借口,以便于让代理出现在主体对象应该出现的地方
真正的主体对象
- 定义一个代理表示的真实对象
代理对象将请求在合适的时候发送给主体对象