最佳设计模式使用:适配器还是外观?

8

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

我有一个客户端系统需要与一个独立的子系统进行交互。由于子系统非常复杂,因此我需要在两者之间使用接口来简化客户端系统。这听起来像是外观模式的完美适用场景,但我认为适配器模式也适合我的问题。

如果中间的接口通过简单的API调用调用子系统中的各个任务,是否会有任何区别?

6个回答

9

根据您的描述,这更符合Facade的接受定义,但我认为这更多是一个语义上的辩论。总体而言,Facade更多地减少了与整个子系统进行接口交互的复杂性,而适配器更加适用于调整现有接口或调用以满足您的特定需求(例如基本功能已经存在,但返回类型不完全是您想要的等)。


7
适配器模式用于将现有类的接口适配到客户端期望使用的另一个接口。通常只涉及从一个接口的方法委托或翻译到另一个接口的相应方法。
外观模式用于通过公开一组更简单的API来简化复杂系统,以便客户端可以使用。它涉及将复杂的API调用模式转换为单个API调用。
您的情况似乎更像需要外观模式而不是适配器。仅实现适配器模式将无法使API简化。最终,称之为什么并不重要。而且这些模式并不互斥。您可以以最有利于您的方式混合两者。

6
这显然是一个外观模式的案例,如果你的目标是简化而不是实际适应。
外观的定义是:为子系统中一组接口提供统一的接口。外观定义了一个更高级别的接口,使子系统更容易使用。
适配器的定义是:将一个类的接口转换为客户端期望的另一个接口。适配器让原本由于不兼容的接口而无法协同工作的类能够协同工作。
以上定义摘自:http://dofactory.com/Patterns/Patterns.aspx

0

Facade模式(提供对更大代码体系的简化接口的对象)适用于您的用例。

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

  1. 需要一个简单的接口来访问复杂系统。
  2. 子系统的抽象和实现紧密耦合。
  3. 需要每个分层软件级别的入口点。
  4. 系统非常复杂或难以理解。

有关Facade的更多详细信息,请参阅相关SE问题。

什么是Facade设计模式?

尽管FacadeAdapter都是结构模式,但意图不同(samitgaur的答案很好地解释了意图部分)。

由于您不需要将一个接口转换为另一个接口,因此Adapter无法满足您的目的。

相关SE问题:

门面模式和适配器模式有什么区别?


0

Facade和Adapter的区别主要在于意图。

如果你想简化接口,那么你需要使用Facade。如果你想适配接口以便将其用作其他东西,那么就需要使用Adapter。

但实际上,如何称呼它并不是问题所在。我的经验法则是,如果你正在实现一个现有的接口,那么你可能正在使用Adapter接口。如果你正在创建一个新的简化接口,那么就是Facade。


-3

外观模式处理接口而非实现。其目的是将内部复杂性隐藏在一个外观简单的单一接口后面。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接