Connection conn = DriverManager.getConnection(URL); 语句stmt = conn.createStatement(); ResultSet rs = stmt.executeQuery(sql);
这里使用的是哪种设计模式?我们看到每个对象都返回一个不同的对象。
选择的设计模式有哪些替代方案?
答案 0 :(得分:11)
显然不是每个代码都遵循设计模式。但仍有一些东西类似于一些熟悉的模式。
整个JDBC架构实际上是一个Bridge,它是一个抽象的概念,它包含可以单独替换的其他抽象。
下面的类实现了一些模式。
对我来说,DriverManager.getConnection(URL)看起来像static factory method,这在Java框架中很常见。
Statement和Connection实际上遵循相同的模式,它是某种Unit of Work or Transaction pattern,因为它允许您将语句组合在一起。但是当它实现JDBC Wrapper接口时,它也遵循Proxy模式。
ResultSet遵循Iterator模式,但它也是Data mapper。
答案 1 :(得分:1)
对选中的答案进行纠正:
ResultSet
不是data mapper ,通过它的链接,我们可以很容易地发现 data mapper 概念是在上下文中创造的企业应用程序体系结构 在2003年。 ResultSet
在1990年代后期已经存在。人们可以搜索关键字“ since”,由此可以推断出添加新功能时最早的版本是从1.2起(在1998年。请参阅Java version history),这意味着诸如 getters 之类的大多数旧功能在1998年之前就已经属于此类
JDK 1.1.8的类列表为here,其中已经有ResultSet
此外,从DriverManager
,Connection
和Driver
来看, JDBC 不仅是静态工厂方法的应用>,但更准确地说, 服务提供者框架的标准应用,一种在项目1中引入的设计模式,在其中考虑了静态工厂方法而不是构造函数本书Effective Java:
Connection
是服务接口 DriverManager.registerDriver
是提供商注册 API DriverManager.getConnection
是服务访问API java.sql.Driver
是服务提供商界面