代理模式

计算机编程中,代理模式软件设计模式。以最通用的形式代理是一个阶级,可作为其他事物的接口。代理可以连接到任何事物:网络连接,内存中的大对象,文件或其他一些昂贵或不可重复的资源。简而言之,代理是客户调用的包装器或代理对象,以访问场景后面的真实服务对象。代理的使用可以简单地转发到真实对象,也可以提供其他逻辑。在代理中,可以提供额外的功能,例如,当对象的操作是资源密集的,或在调用真实对象的操作之前检查前提条件时的缓存。对于客户端,代理对象的使用类似于使用真实对象,因为两者都实现了相同的接口。

概述

代理设计模式是二十三个著名的GOF设计模式之一,描述了如何解决重复的设计问题来设计灵活和可重复使用的对象软件,即易于实现,更改,测试和易于实现,测试和重用。

代理设计模式可以解决什么问题?

  • 应控制对对象的访问。
  • 访问对象时应提供其他功能。

例如,在访问敏感对象时,应该可以检查客户是否具有所需的访问权限。

代理设计模式描述了什么解决方案?

定义一个单独的Proxy对象

  • 可以用作替代另一个对象(Subject) 和
  • 实现其他功能以控制对此主题的访问。

这使得通过Proxy对像在访问主题时执行其他功能。例如,检查访问敏感对象的客户的访问权限。

为了替代主题,代理必须执行Subject介面.客户无法判断他们是否与主题或其代理人一起工作。

另请参见下面的UML类和序列图。

结构

UML类和序列图

代理设计模式的样本UML类和序列图。

在上面的UML类图Proxy班级实现Subject接口,以便它可以替代Subject对象。它保持参考(realSubject)到替换的对象(RealSubject)以便它可以转发请求(realSubject.operation()).

序列图显示了运行时交互:Client对象通过一个Proxy控制访问访问的对象RealSubject目的。在此示例中,Proxy将请求转发给RealSubject,执行请求。

班级图

UML代理
Lepus3中的代理( 传奇

可能的用法场景

远程代理

分布式对象通信中,本地对象表示远程对象(一个属于其他地址空间的对象)。本地对像是远程对象的代理,而在本地对像上的方法调用会导致远程对像上的远程方法调用。一个示例是ATM实现,ATM可能会在远程服务器中存放代理对像以供存在的银行信息。

虚拟代理

在某些情况下,代替骨骼表示,骨架表示可能是有利的。当底层图像尺寸较大时,可以使用虚拟代理对象表示它,从而按需加载真实的对象。

保护代理

可以使用保护代理来控制基于访问权限的资源访问。

也可以看看