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