5

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

谁能解释一下有什么区别?为什么我们需要他们两个?在哪些问题中我们应该只使用代理而不是.net 示例中的另一个?

谢谢

4

2 回答 2

16

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

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

至少我是这么理解的。

编辑:顺便说一句,我个人认为您不必将设计模式名称视为最终的全部。根据您想要实现的目标选择正确的模式,并随心所欲地称呼它。

于 2010-09-22T08:17:42.137 回答
7

代理通常用于以下场景:

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

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

希望这可以帮助!

于 2010-09-22T07:23:01.197 回答