代理模式和适配器模式之间的差异?

时间:2010-09-22 06:18:08

标签: .net design-patterns adapter proxy-pattern

似乎Proxy和Adapter模式之间有相似之处吗?

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

谢谢

2 个答案:

答案 0 :(得分:16)

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

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

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

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

答案 1 :(得分:7)

代理通常用于以下场景:

  • 潜在的“真实”对象创建起来很昂贵。然后,您可以在创建代理时将其作为占位符(下载巨大图像时的进度条图标是典型示例)。延迟加载是另一个典型的例子。我们的想法是,我们不知道用户是否会点击“详细信息”窗格 - 因此我们将推迟加载,直到他实际点击它或系统处于空闲状态。
  • 您希望控制代理中“真实”对象的部分或全部成员的访问权限(SecurityProxy)。

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

希望这有帮助!