日期:2014-05-16 浏览次数:20524 次
?? 今天上午面试中,考官问我一个关于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实现中,没有注意到。
?
?? 作者知识有限,欢迎大家一起讨论和指正,谢谢。