我对如何解释java中的桥梁设计模式感到困惑。根据GoF的定义:
桥接模式是将抽象与其实现解耦,以便两者可以独立变化。
然而,我认为我们做抽象(使用抽象类和接口)是为了将实现与其余代码解耦(因为我们只是声明接口或抽象类而不是实现类)。现在,我认为我对抽象的理解是错误的,因为桥接模式。
抽象到底是什么,它如何与桥接模式中的实现解耦?
我认为我们做抽象(使用抽象类和接口)来将实现与其余代码解耦
您的理解是正确的。
您在边角情况下使用网桥,其中您不仅有一个抽象,而且有两个(或更多)不想混合在一起的抽象。
GOF模式很好地说明了这一点。
工具包的窗口依赖于两个抽象:
如果您定义单个接口:Window,您将把这两个抽象耦合到同一个接口中,并且Window实现将因此耦合它们。
如果您定义了两个接口:Window
(作为模型/函数概念)和WindowImp
(作为OS实现)以及两个不同的层次结构:您可以解耦抽象。
在这种情况下,抽象不是在抽象类等的意义上使用的。抽象更多地用于更高层次的概念,而实现是这个概念的具体实现。
举个例子,假设你正在建造玩具屋。房子的总体概念是有墙、门、窗和屋顶的东西。这将是抽象的。
但是你可以用不同的材料/建筑套装(乐高或杜普、纸、木头、纸板)建造房子。这将是实施。在每个版本中,你需要知道如何建造墙壁、门、窗户和屋顶。
所以你基本上将相同的房子抽象概念与不同的实现结合起来。在我的理解中,这就是桥梁模式的本质。
抽象到底是什么,它如何与桥接模式中的实现解耦?
我假设您熟悉许多桥梁图案文章中使用的形状和颜色示例。例如。这里(如果你不熟悉,最好通过这个链接)
形状和颜色基本上是出于需要而创建的抽象,明天你可能需要一个紫色矩形或带有渐变的十二边形!在文章中,形状有颜色(抽象取决于抽象)。如果形状有红色,就像抽象取决于实现(它将是耦合的),每次你需要不同的颜色时,你都必须创建一个新类。
我知道我的答案是不够的,但我希望这是理解桥梁图案的最后一块拼图。