我正在开发一个需要与某些库的不兼容版本一起使用的应用程序。我的第一反应是在应用程序和库之间引入适配器,该适配器将注入正确的库对象。然后,有人告诉我关于 shims。关于它并没有太多的文献资料。
我想知道 shims 与外观模式和适配器设计模式有什么不同?以及它们的一些流行用途是什么?
我正在开发一个需要与某些库的不兼容版本一起使用的应用程序。我的第一反应是在应用程序和库之间引入适配器,该适配器将注入正确的库对象。然后,有人告诉我关于 shims。关于它并没有太多的文献资料。
我想知道 shims 与外观模式和适配器设计模式有什么不同?以及它们的一些流行用途是什么?
在我看来,适配器和桥接器是相同的。
而外观模式则服务于不同的目的。如果您期望客户端代码需要能够拉开幕布,访问底层库而不使用您的对象模型,那么这将成为一个外观模式。外观模式在更复杂的系统上提供了一组简化或常见的对象/方法,但仍然提供访问底层复杂性以实现附加行为。
使用适配器意味着您的客户端代码完全不知道底层实现细节。
在我看来,适配器(Adapter)和垫片(Shim)的功能类似,但意义不同。
垫片
通常与被“垫”的对象具有非常相似,甚至精确的接口。例如,代理对象可以被认为是某种程度上的垫片。
而适配器
通常与被“适配”的对象具有相当不同,甚至完全不同的接口。
请注意“垫片”和“适配”这两个动词。这就是我通常区分这两个概念的方式。