我对适配器模式有疑问。我正在实现这种模式,因为我有一个第三方库,不想依赖它。
但是,我不明白为什么在同一个proyect中创建IAdapter和Adapter会删除依赖项。
因为如果第三方库发生更改,则需要重新编译包,因此也需要重新编译使用IAdapter的任何类。
IAdapter和适配器必须位于不同的包中吗?
衡量2个组件/类是否分离的衡量标准不仅仅基于重新编译软件包的需要。它有多个维度。
IAdapter
的客户端中导致任何代码更改?IAdapter
的客户端?根据您的需求,您可以通过以下方式实现上述目标。
IAdapter
实施ThirdParty1Adapter
。如果你想更换它,你可以实现ThirdParty2Adapter
,履行IAdapter
的所有合同。您的IAdapter
客户将不受影响。IAdapter
的实现类捆绑在一个专用的jar中。客户端应用程序希望由DI容器或应用程序服务器提供IAdapter
的实现之一。这里有一些选择,但这里只是技术不可知。适配器不是神奇的。它将调整类/库的特定版本,以使其可用于您希望使用的API。 你必须比不同的包更进一步,因为在你的情况下,适配器类(适配器接口和适配器实现)甚至不应该包含在第三方库源代码中。 您希望将它们分离,以使适配器依赖于已调整类的特定和已发布版本,以使其集成稳定。