首页 > 解决方案 > 适配器模式如何解决依赖关系?

问题描述

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

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

因为如果第三方库发生变化,包需要重新编译,所以任何使用IAdapter的类也需要重新编译。

IAdapter 和 Adapter 是否必须在不同的包中?

标签: design-patternsadapter

解决方案


衡量两个组件/类是否解耦不仅仅基于重新编译包的需要。它有多个维度。

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

根据您的需求,以下是实现上述目标的方法。

  1. 您可以IAdapter通过ThirdParty1Adapter. 如果你想替换它,你可以实现ThirdParty2Adapter它来满足IAdapter. 您的IAdapter客户将不受影响。
  2. 您可以将实现类捆绑IAdapter在一个专用的 jar 中。客户端应用程序期望IAdapterDI 容器或应用程序服务器提供其中一种实现。这里有一些选择,但这里只是与技术无关。
  3. 您需要一个运行时,允许您动态添加 jar 并替换运行时加载的现有类中的依赖项。您可以使用 OSGi 中常见的类模式,它建议创建专用的 API 包、提供者包和消费者包。您可以在 OSGi 运行时中添加/替换提供程序包,这些包可以被拾取并注入到已经运行的类中。

推荐阅读