【问题标题】:Differences between Proxy pattern and Adapter pattern?代理模式和适配器模式的区别?
【发布时间】:2011-04-15 13:41:44
【问题描述】:

看来Proxy和Adapter模式有相似之处?

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

谢谢

【问题讨论】:

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


    【解决方案1】:

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

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

    至少我是这么理解的。

    编辑:顺便说一下,我个人认为您不必将设计模式名称视为最终的全部。根据您想要实现的目标选择正确的模式,然后随意命名。

    【讨论】:

      【解决方案2】:

      代理通常用于以下场景:

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

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

      希望这会有所帮助!

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-09-08
        • 2010-11-28
        • 1970-01-01
        • 2011-10-12
        • 2016-10-08
        • 2011-03-30
        • 1970-01-01
        相关资源
        最近更新 更多