JDBC 设计模式 (欢迎大家讨论)

   今天上午面试中,考官问我一个关于JDBC的设计模式的问题,但是回答是利用Bridge模式、Service Locator。后来,我想了仔细想了一下,其实还有一些。

 

为什么是Bridge呢?

 

    因为JDBC驱动中,有一个jdbc-odbc,这个利用桥接模式。从Drvier到Connection中的DriverManager,Connection到ResultSet的Statement,这两个对象不是起了Bridge对象的作用吗?同时JDBC的接口和驱动类实现也是分离的。

 

为什么是Service Locator呢?

 

    在JDBC驱动加载是,需要URL参数,这个东西和JDNI类似,通过“命名空间”。我当时没有记错,经过核实,它确实通过Provider来提供具体的实现。JDBC,XML,NIO等技术,JDK采用的SPI的机制。

 

   上述说法难免牵强,因此删除。

 

还有那些?

 

   抽象工厂:如果把Connection,Statement作为工厂类的话,那么自然他们是抽象工厂,Connection可以产生抽象的工厂Statement或者PreparedStatement。

 

   单例模式:通过ClassLoader加载java.sql.Drvier的实现类,JDBC系统会保存一个单例。

 

   组合模式:JDBC驱动中,底层的Connection实现,需要知道Driver的元信息,自然,Statement也需要Connection。至少,MySQL是这么实现的。

 

   但是我考虑没有把adapter作为答案,因为我觉得JDBC驱动实现是一种接口编程,没有过多的类型适配,也不存在接口兼容。至少,我在MySQL实现中,没有注意到。

 

   作者知识有限,欢迎大家一起讨论和指正,谢谢。

你可能感兴趣的:(设计模式)