桥梁设计模式中抽象的含义

时间:2018-04-01 11:10:31

标签: java oop design-patterns abstraction bridge

我对如何解释java中的桥设计模式感到困惑。根据GoF的定义:

  

桥接模式是将抽象与其实现分离,以便两者可以独立变化。

但是,我认为我们使用抽象(使用抽象类和接口)将实现与其余代码分离(因为我们只是声明接口或抽象类而不是实现类)。现在,我认为由于桥接模式我对抽象的理解是错误的。

抽象 究竟是什么?它如何与桥接模式中的 实现 分离?

5 个答案:

答案 0 :(得分:1)

  

我认为我们做抽象(使用抽象类和   接口)将实现与其余代码分离

您的理解是正确的 您可以在角落情况中使用桥接,其中您不仅需要一个而且还有两个(或更多)抽象,而您不想将它们混合在一起

GOF模式很好地说明了这一点 工具箱的窗口依赖于两个抽象:

  • 窗口中的组件(图标,瞬态,全尺寸等)
  • 窗口中的OS实现/功能。

如果你定义一个单独的接口:Window,你将两个抽象结合到一个相同的接口中,而Window实现将因此将它们耦合在一起。

如果您定义了两个接口:Window(作为模型/功能概念)和WindowImp(作为OS实现)和两个不同的层次结构:您将抽象分离。

答案 1 :(得分:0)

在这种情况下,

抽象不是在抽象类等意义上使用。抽象更多地用于某种事物的更高层次的意义,而实现是这个概念的具体实现。 / p>

举个例子,假设您正在建造玩具屋。房子的一般概念是有墙,门,窗和屋顶的东西。这将是抽象。

但是你可以用不同的材料/建筑集(Lego或Duplo,纸张,木材,纸板)建造房屋。那将是实施。在每个版本中,您都需要知道如何建造墙壁,门,窗户和屋顶。

所以你基本上把房子的抽象概念与不同的实现结合起来。据我所知,这是桥梁模式的本质。

答案 2 :(得分:0)

由“四人帮”定义的桥模式意味着将抽象与其实现分离,以便两者可以独立变化。一个很好的例子是JDBC Driver。该模式说明了开放/封闭原则,其中接口(JDBC API)保持不变,但可以添加新的实现(JDBC驱动程序)并相互替换。

使用JDBC的数据访问代码只需要依赖于ConnectionStatementResultSet等API接口,而不是关心应用程序连接到的实际数据库系统。 JDBC将应用程序桥接到场景后面使用的数据库。这样,只需更改下面的JDBC驱动程序,就可以对不同的RDBMS使用相同的客户端代码。

答案 3 :(得分:0)

  

桥接模式是将抽象与其实现分离,以便两者可以独立变化。

你说明了

  

抽象(使用抽象类和接口)来解耦   从其余代码实现(因为我们只是声明   接口或抽象类而不是实现类)

基本上,您所说的是 (不是 实施桥接模式

实际上设计模式 语言无关。解决特定问题是心理模型。根据不同语言的不同特征,可以有很多方法来实现特定模式。

由于您已经特别提到过桥接模式和java语言,因此我们使用java进行的任何工作,编程到接口(抽象)而不是实现,都是Bridge Pattern的完美示例。让我解释一些其他的例子。

  1. List<String> myList = new ArrayList(); //line1 myList.add("s1"); myList.remove(0);
  2. 在第1行中,您可以看到我已将引用类型标记为List 而不是 ArrayList。所以我编程得更抽象,因为我只需要List的操作,不需要ArrayList的特定操作。在这种情况下,如果我需要引入 LinkedList 而不是ArrayList,我只需要将第1行更改为new LinkedList();。就是这样。

    1. 我有一个HashMap变量,我想实现一个方法来删除其键为“remove”的任何成员。在这里可以推断出如下的解决方案

      public void removeMember(HashMap<String, Strng> map){
          map.remove("remove");
      }
      
    2. 但是忘记了,我有一个HashMap。我仍然可以将这种方法写入适合任何类型的地图的地方。

      public void removeMember(Map<String, Strng> map){
              map.remove("remove");
      }
      

      请注意,现在我们以更抽象的方式思考,因此我们享受可重用性作为奖励。

      所以有很多例子,在这里陈述一切都没有意义。但无论如何我认为你有关键的想法。只记得从实现中剔除并考虑抽象,现在你自动遵循Bridge模式。 ;)

答案 4 :(得分:0)

  

抽象究竟是什么以及如何与抽象脱钩   在桥梁模式中实现?

我假设您熟悉许多桥模式文章中使用的Shape和Color示例。例如。 here(如果您不熟悉,最好通过此链接)

形状和颜色基本上是根据需要创建的抽象,明天您可能需要紫色矩形或带渐变的十二边形!在文章中, Shape具有颜色(抽象取决于抽象)。 如果Shape有红色,那么抽象取决于实现(它将被耦合),并且每次需要不同颜色时都必须创建一个新类。

我知道我的答案是不够的,但我希望它是理解桥梁模式的最后一块拼图。