什么是shim和facade/adapter模式之间的区别?

31

我正在开发一个需要与某些库的不兼容版本一起使用的应用程序。我的第一反应是在应用程序和库之间引入适配器,该适配器将注入正确的库对象。然后,有人告诉我关于 shims。关于它并没有太多的文献资料。

我想知道 shims 与外观模式和适配器设计模式有什么不同?以及它们的一些流行用途是什么?


1
请参阅https://dev59.com/KXI95IYBdhLWcg3w3iDG#12988556。 - Michael Freidgeim
类似于:https://softwareengineering.stackexchange.com/questions/66962/are-wrapper-and-shim-synonymous - Ciro Santilli OurBigBook.com
2个回答

28

在我看来,适配器和桥接器是相同的。

而外观模式则服务于不同的目的。如果您期望客户端代码需要能够拉开幕布,访问底层库而不使用您的对象模型,那么这将成为一个外观模式。外观模式在更复杂的系统上提供了一组简化或常见的对象/方法,但仍然提供访问底层复杂性以实现附加行为。

使用适配器意味着您的客户端代码完全不知道底层实现细节。


Facade/Adapter的区别解释得很好。 - chakrit
2
@Chakrit 但是你的回答澄清了Shims和Adapters之间的区别。 - Michael Freidgeim

25

在我看来,适配器(Adapter)和垫片(Shim)的功能类似,但意义不同。

垫片通常与被“垫”的对象具有非常相似,甚至精确的接口。例如,代理对象可以被认为是某种程度上的垫片。

适配器通常与被“适配”的对象具有相当不同,甚至完全不同的接口。

请注意“垫片”和“适配”这两个动词。这就是我通常区分这两个概念的方式。


动词方面的技巧很不错。 - Brad

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接