今天上午面試中,考官問我一個關於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實現中,沒有注意到。
作者知識有限,歡迎大家一起討論和指正,謝謝。