最佳设计模式:适配器或外观

时间:2010-07-12 21:22:21

标签: design-patterns adapter facade

我无法决定哪种模式最适合以下问题。

我有一个客户端系统,他将与一个单独的子系统进行交互。子系统非常复杂,所以我需要两者之间的接口来简化客户端系统。这听起来非常适合Facade模式,但我认为适配器模式太适合我的问题了。

如果中间的接口通过简单的API调用调用子系统上的各个任务,它会有什么不同吗?

6 个答案:

答案 0 :(得分:9)

从你的描述中,它更接近Facade的公认定义,但我更多地说它是一个语义辩论而不是其他任何东西。一般来说,Facade更能降低与整个子系统接口的复杂性,而适配器更适合调整现有接口或调用您的特定需求(例如基本功能在那里,但返回类型不是您想要的,等等)。

答案 1 :(得分:6)

这显然是一个Facade模式案例,你的目标是简化而不是实际的适应。

外墙定义:

  

为集合提供统一的接口   子系统中的接口。正面   定义了一个更高级别的接口   使子系统更易于使用。

适配器定义:

  

将类的接口转换为   客户期望的其他接口。   适配器允许类一起工作   否则,因为   不兼容的接口。

取自以下的定义:http://dofactory.com/Patterns/Patterns.aspx

答案 2 :(得分:5)

适配器模式用于您希望将现有类的接口调整为客户端期望使用的另一个接口。它通常只涉及从一个接口的方法到另一个接口的相应方法的委托或转换。

当您希望通过公开客户端可以使用的更简单的API集来简化复杂系统时,使用

Facade 。它涉及将复杂的API调用模式转换为单个API调用。

您的情况听起来更像是需要一个外观而不是一个适配器。仅实现适配器模式不会为您提供API简化的好处。最后,你所谓的并不重要。而这些模式并不是唯一的。你可以以最能带来收益的方式混合两者。

答案 3 :(得分:0)

Facade和Adapter之间的区别主要是意图。

如果您想要做的是简化界面,那么您正在查看Facade。如果你想调整界面,以便它可以作为其他东西使用它的适配器。

但实际上,你怎么称呼它是什么问题?我的经验法则是,如果您正在实现现有接口,则可能正在使用适配器接口。如果您正在创建一个新的简化界面,它是一个Facade。

答案 4 :(得分:0)

Facade pattern(一个提供简化的代码体的接口的对象)适合您的用例。

使用Facade的清单:(来自链接的维基百科文章)

  1. 访问复杂系统需要一个简单的界面。
  2. 子系统的抽象和实现是紧密耦合的。
  3. 需要分层软件的每个级别的入口点。
  4. 系统非常复杂或难以理解。
  5. 有关Facade的详细信息,请参阅SE问题。

    What is Facade Design Pattern?

    即使 Facade Adapter 都是结构模式,意图也不同(samitgaur回答很好地解释了意图部分)。

    由于您没有将一个接口转换为其他接口,因此适配器无法满足您的需求。

    相关的SE问题:

    What is the difference between the Facade and Adapter Pattern?

答案 5 :(得分:-3)

Facade处理接口,而不是实现。其目的是隐藏单个界面背后的内部复杂性,这在外部看起来很简单。