【问题标题】:Meaning of abstraction in bridge design pattern桥梁设计模式中抽象的意义
【发布时间】:2018-04-01 11:10:30
【问题描述】:
我对如何解释 java 中的桥接设计模式感到困惑。根据 GoF 的定义:
桥接模式是将抽象与其实现解耦,使两者可以独立变化。
但是,我认为我们进行抽象(使用抽象类和接口)以将实现与其余代码分离(因为我们只是声明接口或抽象类而不是实现类)。现在,由于桥接模式,我认为我对抽象的理解是错误的。
抽象到底是什么?它是如何与桥接模式中的实现解耦的?
【问题讨论】:
标签:
java
oop
design-patterns
abstraction
bridge
【解决方案1】:
我认为我们做抽象(使用抽象类和
接口)将实现与其余代码解耦
你的理解是正确的。
您在极端情况下使用桥接器您不仅有一个,而且有两个(或更多)抽象,您不想混合在一起。
GOF 模式很好地说明了这一点。
工具包的窗口依赖于两个抽象:
- 按组件(图标、瞬态、全尺寸等)表示的窗口
- 操作系统实现/功能方面的窗口。
如果您定义一个接口:Window,您会将这两个抽象耦合到同一个接口中,Window 实现将因此耦合它们。
如果您定义两个接口:Window(作为模型/功能概念)和WindowImp(作为操作系统实现)和两个不同的层次结构:您可以解耦抽象。
【解决方案2】:
抽象在这种情况下不是在抽象类等意义上使用的。抽象更多地用于某种更高层次的想法,而实现是这个想法的具体实现。
举个例子,假设您正在建造玩具屋。房子的一般概念是有墙壁、门、窗和屋顶的东西。那就是抽象。
但是您可以使用不同的材料/构造套件(乐高或得宝、纸张、木材、纸板)建造房屋。那将是实施。在每个版本中,您都需要知道如何建造墙壁、门、窗和屋顶。
所以你基本上将房子的相同抽象概念与不同的实现结合起来。在我看来,这就是桥接模式的本质。
【解决方案3】:
究竟什么是抽象以及它是如何与抽象分离的
桥接模式的实现?
我假设您熟悉许多桥梁图案文章中使用的形状和颜色示例。例如。 here(不熟悉的最好通过这个链接)
形状和颜色基本上是出于一种需求而创建的抽象,明天您可能需要一个紫色矩形或带渐变的十二边形!在文章中,Shape has a Color(抽象取决于抽象)。 如果 Shape 有红色,那么就像 Abstraction 取决于实现(它将被耦合),并且每次需要不同颜色时都必须创建一个新类。
我知道我的答案是不够的,但我希望它是理解桥接模式的最后一块拼图。