为什么JDBC是Bridge设计模式的典型例子?

问题描述:

我从很多资源中发现JDBC是Bridge设计模式的典型例子。但他们通常没有告诉细节,所以我想知道细节。根据我的理解:为什么JDBC是Bridge设计模式的典型例子?

  • Driver接口是DriverManager和具体的JDBC驱动程序类之间的
  • Connection接口是Driver和具体的JDBC连接类之间的
  • Statement接口是Connection和具体SQL语句类
  • 之间
  • ResultSet接口是Statement和concete结果集类

请修改,如果我的陈述是错误的。此外,我想DataSource接口也是,但我想不通这是一个

Bridge pattern,由“*”定义,指之间脱钩的抽象其实施使两者可以独立变化。在这种情况下,并不是把不同的班级连接在一起。相反,该模式说明了接口(JDBC API)保持不变的Open/Closed principle,但可以添加新实现(JDBC驱动程序)并将其替换为对方。

这意味着使用JDBC只需要靠而不是关心实际的数据库系统中的应用程序连接到在API接口,如ConnectionStatementResultSet,该数据访问代码。 JDBC将桥接应用程序部署到的环境中使用的数据库。因此,您可以针对不同的RDBMS运行相同的代码(使用JDBC抽象),并且只需要更改JDBC驱动程序(实现)。

+0

根据你的陈述,我的言论都不是正确的? :) – Rui

+0

我认为你用两种不同的方式使用“桥”这个词。例如。称“驱动程序接口是具体JDBC驱动程序类的_bridge_”是IMO本着GoF定义的精神。 –

它不是。

Bridge模式需要一个API的具体实现,该API映射到另一个API的具体实现。它很少被使用:事实上,自从GoF书出版以来,我已经在20多年中使用过它了,我对此感到后悔。

JDBC提供了API(接口)的抽象定义,这些定义由具体实现的相同的 API实现,并依次执行网络操作,而不是调用不同的API。

然而,类型2 JDBC驱动程序在内部将是桥接模式的一个示例。在这个架构中,Java层与JNI层交谈,JNI层可能与供应商可能已经存在和提供的不同C API对话。这个架构是过渡性的,我怀疑你现在会找到一个例子。

+0

“具体实现一个映射到另一个API的具体实现的API”:我不认为这就是GoF定义Bridge的方式。你的定义看起来更像是适配器模式。 GoF's Bridge是关于将合同从执行中解脱出来的。 –

+0

@MickMnemonic它不是,它是关于能够独立地改变抽象和实现。你自己这么说。如果他们具有相同的界面,则不能这样做。 – EJP

+0

对不起,但我不明白你的意思。抽象是实现的接口。 –