垫片和外观/适配器模式有啥区别?

Posted

技术标签:

【中文标题】垫片和外观/适配器模式有啥区别?【英文标题】:What is the difference between the shim and facade/adapter patterns?垫片和外观/适配器模式有什么区别? 【发布时间】:2012-03-19 17:45:27 【问题描述】:

我正在开发一个需要使用某些库的不同不兼容版本的应用程序。我的直觉是在应用程序和库之间引入一个适配器,该适配器将在其中注入适当的库对象。然后,有人告诉我关于垫片的事。关于它的文献不多。

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

【问题讨论】:

另见***.com/questions/2116142/what-is-a-shim/… 类似:softwareengineering.stackexchange.com/questions/66962/… 【参考方案1】:

在我看来,Adapter 和 Shim 是一样的。

另一方面,门面有不同的用途。如果您希望您的客户端代码能够拉开帷幕,可以这么说,并在不使用您的对象模型的情况下访问底层库,那将是一个 Facade。 Facade 在更复杂的系统之上提供了一组简化或通用的对象/方法,但在需要额外行为时仍提供对底层复杂性的访问。

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

【讨论】:

很好地解释了外观/适配器的差异。 @Chakrit 但你的回答澄清了垫片和适配器之间的区别【参考方案2】:

IMO、Adapter 和 Shim 功能相似,但含义不同。

Shim 通常具有非常相似(如果不准确)的一组接口,对象被“填充”。例如,代理对象可能有点像 shim。

虽然 Adapter 通常具有完全不同(如果不是完全不同)的一组接口,但对象正在“适应”。

注意“shim”和“adapt”动词。这就是我通常区分两者的方式。

【讨论】:

动词的好技巧

以上是关于垫片和外观/适配器模式有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章

通道适配器和消息传递网关模式有啥区别?

适配器模式和代理模式的区别

装饰器、包装器和适配器模式之间有啥区别?

代理 适配 外观

GoF设计模式:Facade Pattern 外观模式

适配器模式和外观模式