我对如何解释java中的桥设计模式感到困惑。根据GoF的定义:
桥接模式是将抽象与其实现分离,以便两者可以独立变化。
但是,我认为我们使用抽象(使用抽象类和接口)将实现与其余代码分离(因为我们只是声明接口或抽象类而不是实现类)。现在,我认为由于桥接模式我对抽象的理解是错误的。
抽象 究竟是什么?它如何与桥接模式中的 实现 分离?
答案 0 :(得分:1)
我认为我们做抽象(使用抽象类和 接口)将实现与其余代码分离
您的理解是正确的 您可以在角落情况中使用桥接,其中您不仅需要一个而且还有两个(或更多)抽象,而您不想将它们混合在一起。
GOF模式很好地说明了这一点 工具箱的窗口依赖于两个抽象:
如果你定义一个单独的接口:Window,你将两个抽象结合到一个相同的接口中,而Window实现将因此将它们耦合在一起。
如果您定义了两个接口:Window
(作为模型/功能概念)和WindowImp
(作为OS实现)和两个不同的层次结构:您将抽象分离。
答案 1 :(得分:0)
抽象不是在抽象类等意义上使用。抽象更多地用于某种事物的更高层次的意义,而实现是这个概念的具体实现。 / p>
举个例子,假设您正在建造玩具屋。房子的一般概念是有墙,门,窗和屋顶的东西。这将是抽象。
但是你可以用不同的材料/建筑集(Lego或Duplo,纸张,木材,纸板)建造房屋。那将是实施。在每个版本中,您都需要知道如何建造墙壁,门,窗户和屋顶。
所以你基本上把房子的抽象概念与不同的实现结合起来。据我所知,这是桥梁模式的本质。
答案 2 :(得分:0)
由“四人帮”定义的桥模式意味着将抽象与其实现分离,以便两者可以独立变化。一个很好的例子是JDBC Driver。该模式说明了开放/封闭原则,其中接口(JDBC API)保持不变,但可以添加新的实现(JDBC驱动程序)并相互替换。
使用JDBC的数据访问代码只需要依赖于Connection
,Statement
或ResultSet
等API接口,而不是关心应用程序连接到的实际数据库系统。 JDBC将应用程序桥接到场景后面使用的数据库。这样,只需更改下面的JDBC驱动程序,就可以对不同的RDBMS使用相同的客户端代码。
答案 3 :(得分:0)
桥接模式是将抽象与其实现分离,以便两者可以独立变化。
你说明了
抽象(使用抽象类和接口)来解耦 从其余代码实现(因为我们只是声明 接口或抽象类而不是实现类)
基本上,您所说的是 (不是 ) 实施桥接模式。。
实际上设计模式 语言无关。解决特定问题是心理模型。根据不同语言的不同特征,可以有很多方法来实现特定模式。
由于您已经特别提到过桥接模式和java语言,因此我们使用java进行的任何工作,编程到接口(抽象)而不是实现,都是Bridge Pattern的完美示例。让我解释一些其他的例子。
List<String> myList = new ArrayList(); //line1
myList.add("s1");
myList.remove(0);
在第1行中,您可以看到我已将引用类型标记为List
而不是 ArrayList
。所以我编程得更抽象,因为我只需要List的操作,不需要ArrayList的特定操作。在这种情况下,如果我需要引入 LinkedList 而不是ArrayList,我只需要将第1行更改为new LinkedList();
。就是这样。
我有一个HashMap变量,我想实现一个方法来删除其键为“remove”的任何成员。在这里可以推断出如下的解决方案
public void removeMember(HashMap<String, Strng> map){
map.remove("remove");
}
但是忘记了,我有一个HashMap。我仍然可以将这种方法写入适合任何类型的地图的地方。
public void removeMember(Map<String, Strng> map){
map.remove("remove");
}
请注意,现在我们以更抽象的方式思考,因此我们享受可重用性作为奖励。
所以有很多例子,在这里陈述一切都没有意义。但无论如何我认为你有关键的想法。只记得从实现中剔除并考虑抽象,现在你自动遵循Bridge模式。 ;)
答案 4 :(得分:0)
抽象究竟是什么以及如何与抽象脱钩 在桥梁模式中实现?
我假设您熟悉许多桥模式文章中使用的Shape和Color示例。例如。 here(如果您不熟悉,最好通过此链接)
形状和颜色基本上是根据需要创建的抽象,明天您可能需要紫色矩形或带渐变的十二边形!在文章中, Shape具有颜色(抽象取决于抽象)。 如果Shape有红色,那么抽象取决于实现(它将被耦合),并且每次需要不同颜色时都必须创建一个新类。
我知道我的答案是不够的,但我希望它是理解桥梁模式的最后一块拼图。