Java 使用适配器vs代理与多个提供程序集成

Java 使用适配器vs代理与多个提供程序集成,java,design-patterns,Java,Design Patterns,我将与多个提供商集成,每个提供商都有不同的接口,因此我有两个选项,希望选择其中一个: 1-使用适配器,以便在我的应用程序中使接口包含我期望的所有参数方法,并且当get provider API从我的应用程序实现接口时,将为此API生成适配器 2-使用通用代理实现特定接口“可能是适配器选项中指定的接口”,该代理必须调用提供程序API,并为我的应用程序提供使用该接口的方法 注1:您可能认为两个选项相同,但事实并非如此。在适配器中,您希望提供程序api具有相同的方法,具有不同的名称和相同的参数,但可能

我将与多个提供商集成,每个提供商都有不同的接口,因此我有两个选项,希望选择其中一个:

1-使用适配器,以便在我的应用程序中使接口包含我期望的所有参数方法,并且当get provider API从我的应用程序实现接口时,将为此API生成适配器

2-使用通用代理实现特定接口“可能是适配器选项中指定的接口”,该代理必须调用提供程序API,并为我的应用程序提供使用该接口的方法

注1:您可能认为两个选项相同,但事实并非如此。在适配器中,您希望提供程序api具有相同的方法,具有不同的名称和相同的参数,但可能需要强制转换;在代理中,您从提供程序方面具有更大的灵活性,因此提供程序可以成为java api的一部分,休息或其他服务

注2:在选项1中,我和提供者api之间的合同是业务共识,但在选项2中,必须实现代码接口

注3:在一个解决方案中,我可以在我的应用程序中使用代理,并使用适配器调用提供程序API,如果提供程序API与我们的业务共识不匹配,将在其上使用另一个代理,如:

Provider => proxy => adaptor => proxy

但我需要它,而不是只使用代理来包装所有这些吗

我认为代理模式并不是为了使预期的接口适应另一个接口。也就是说,代理模式旨在解决与以下相关的问题:

  • 访问远程接口
  • 访问昂贵/复杂的接口
在这两种情况下,代理都可以轻松访问接口

另一方面,您有适配器模式,用于将实际接口适配到预期接口。它不介意您需要的转换是简单的还是复杂的(如您在注释1中所述)


因此,如果我没有误解您的问题,我认为您使用适配器模式更好。

您需要现在做出决定吗?据我所知,最重要的事情是将您的代码与您将使用的API解耦(您已经通过接口facade做到了这一点)。这将允许您推迟决策,直到您知道“在工作中”的外观,并应用适合当时的最佳设计。更多详细信息(代码示例)将允许更清晰的答案。这不是纯粹的代理模式,而是代理必须实现特定的接口。还有第三种情况,称为保护代理:-但在OP的问题中,它是由多个提供程序编写的,
每个提供程序都有不同的接口
——正如您所说,
适配器
肯定解决了这个问题。@BassemRedaZohdy您可以为适配器提供代理。我不会做一个混合设计,因为对于已经了解了模式名称和用法的工程师来说,这不太清楚。