适配器模式如何解决依赖关系?

问题描述 投票:0回答:2

我对适配器模式有疑问。我正在实现这种模式,因为我有一个第三方库,不想依赖它。

但是,我不明白为什么在同一个proyect中创建IAdapter和Adapter会删除依赖项。

因为如果第三方库发生更改,则需要重新编译包,因此也需要重新编译使用IAdapter的任何类。

IAdapter和适配器必须位于不同的包中吗?

design-patterns adapter
2个回答
1
投票

衡量2个组件/类是否分离的衡量标准不仅仅基于重新编译软件包的需要。它有多个维度。

  1. 您是否可以从客户端应用程序替换第三方库而不会在IAdapter的客户端中导致任何代码更改?
  2. 你能否更换第三方库而无需重建IAdapter的客户端?
  3. 在某些情况下,您是否可以在运行时替换第三方库而无需重新启动应用程序服务器?

根据您的需求,您可以通过以下方式实现上述目标。

  1. 你可以让IAdapter实施ThirdParty1Adapter。如果你想更换它,你可以实现ThirdParty2Adapter,履行IAdapter的所有合同。您的IAdapter客户将不受影响。
  2. 您可以将IAdapter的实现类捆绑在一个专用的jar中。客户端应用程序希望由DI容器或应用程序服务器提供IAdapter的实现之一。这里有一些选择,但这里只是技术不可知。
  3. 您需要一个运行时,它允许您动态添加jar并替换运行时加载的现有类中的依赖项。您可以使用OSGi中常见的类模式,建议创建专用API包,提供程序包和使用者包。您可以在OSGi运行时中添加/替换提供程序包,这些提供程序包可以在已运行的类中获取和注入。

0
投票

适配器不是神奇的。它将调整类/库的特定版本,以使其可用于您希望使用的API。 你必须比不同的包更进一步,因为在你的情况下,适配器类(适配器接口和适配器实现)甚至不应该包含在第三方库源代码中。 您希望将它们分离,以使适配器依赖于已调整类的特定和已发布版本,以使其集成稳定。

© www.soinside.com 2019 - 2024. All rights reserved.