2010-09-22 91 views
5

似乎代理和适配器模式之间有相似之处?代理模式和适配器模式之间的区别?

任何人都可以解释一下有什么不同吗?为什么我们需要他们两个?在哪个问题中,我们应该只使用代理而不使用另一个.net示例?

谢谢

回答

7

代理服务器通常用于以下情况:

  • 底层的“真实”目的是建立昂贵。然后,您可以在创建代理时创建占位符(下载大图像时的进度条图标就是一个典型示例)。延迟加载是另一个典型的例子。我们的想法是,我们不知道用户是否会点击'详细信息'窗格 - 所以我们会推迟加载,直到他实际点击它或系统空闲。
  • 您想要控制对代理内“真实”对象的部分或全部成员的访问(SecurityProxy)。

适配器扮演另一个角色 - 他们弥合了两个没有关系的类之间的差距。适配器可以充当两个对象。这主要用于当必须与遗留系统(或第三方框架)整合时,无法更改API。

希望这会有所帮助!

16

代理公开与它隐藏的对象完全相同的行为。代理通常用于联系远程对象,而不必知道如何联系它。一个例子是一个WCF服务,你可以将服务封装到一个代理中,该代理暴露与wcf服务完全相同的接口,但隐藏了实现细节,例如使用channelfactory和处理faultexceptions等等。这就像客户端在说话到本地的WCF服务。

适配器还隐藏了一个底层对象,但它将您交换的数据转换为底层对象使用的正确格式和内容。像Goblin说的,一个例子确实是一个遗留系统。您将与旧系统交谈的复杂性(可能使用健谈或CRUDy API,并且希望将其隐藏在粗粒度操作之后)复杂到适配器中,以向客户端提供与传统系统交谈的简单方法。

这就是我至少理解它的方式。

编辑:顺便说一下,我个人觉得你不必将设计模式名称看作是最终全做的。根据您想要达到的目标选择合适的模式,并根据需要调用它。

相关问题