为什么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接口,如Connection
,Statement
或ResultSet
,该数据访问代码。 JDBC将桥接应用程序部署到的环境中使用的数据库。因此,您可以针对不同的RDBMS运行相同的代码(使用JDBC抽象),并且只需要更改JDBC驱动程序(实现)。
它不是。
Bridge模式需要一个API的具体实现,该API映射到另一个API的具体实现。它很少被使用:事实上,自从GoF书出版以来,我已经在20多年中使用过它了,我对此感到后悔。
JDBC提供了API(接口)的抽象定义,这些定义由具体实现的相同的 API实现,并依次执行网络操作,而不是调用不同的API。
然而,类型2 JDBC驱动程序在内部将是桥接模式的一个示例。在这个架构中,Java层与JNI层交谈,JNI层可能与供应商可能已经存在和提供的不同C API对话。这个架构是过渡性的,我怀疑你现在会找到一个例子。
“具体实现一个映射到另一个API的具体实现的API”:我不认为这就是GoF定义Bridge的方式。你的定义看起来更像是适配器模式。 GoF's Bridge是关于将合同从执行中解脱出来的。 –
@MickMnemonic它不是,它是关于能够独立地改变抽象和实现。你自己这么说。如果他们具有相同的界面,则不能这样做。 – EJP
对不起,但我不明白你的意思。抽象是实现的接口。 –
根据你的陈述,我的言论都不是正确的? :) – Rui
我认为你用两种不同的方式使用“桥”这个词。例如。称“驱动程序接口是具体JDBC驱动程序类的_bridge_”是IMO本着GoF定义的精神。 –