java面試題之----jdbc中使用的設計模式(橋接模式)
1.JDBC(JavaDatabase Connectivity)
JDBC是以統一方式訪問數據庫的API.
它提供了獨立於平臺的數據庫訪問,也就是說,有了JDBC API,我們就不必為訪問Oracle數據庫專門寫一個程序,為訪問Sybase數據庫又專門寫一個程序等等,只需要用JDBC API寫一個程序就夠了,它可以向相應數據庫發送SQL調用.JDBC是Java應用程序與各種不同數據庫之間進行對話的方法的機制.簡單地說,它做了三件事:與數據庫建立連接--發送操作數據庫的語句--處理結果.
jdbc規範使用到主要涉及的設計模式:橋接模式
橋接模式(Bridge)是一種結構型設計模式。Bridge模式基於類的最小設計原則,通過使用封裝、聚合及繼承等行為讓不同的類承擔不同的職責。它的主要特點是把抽象(Abstraction)與行為實現(Implementation)分離開來,從而可以保持各部分的獨立性以及應對他們的功能擴展。
橋接模式的角色和職責:
1.Client 調用端
這是Bridge模式的調用者。
2.抽象類(Abstraction)
抽象類接口(接口這貨抽象類)維護隊行為實現(implementation)的引用。它的角色就是橋接類。
3.Refined Abstraction
這是Abstraction的子類。
4.Implementor
行為實現類接口(Abstraction接口定義了基於Implementor接口的更高層次的操作)
5.ConcreteImplementor
Implementor的子類
橋接模式的UML圖如下:
示例代碼如下:
首先定義Implementor接口,其中定義了其實現類必須要實現的接口operation()
1 public interface Implementor { 2 public void operation(); 3 }
下面定義Implementor接口的兩個實現類:
1 public class ConcreateImplementorA implements Implementor { 2 @Override 3 public void operation() { 4 System.out.println("this is concreteImplementorA‘s operation..."); 5 }6 }
1 public class ConcreateImplementorB implements Implementor { 2 @Override 3 public void operation() { 4 System.out.println("this is concreteImplementorB‘s operation..."); 5 } 6 }
下面定義橋接類Abstraction,其中有對Implementor接口的引用:
1 public abstract class Abstraction { 2 private Implementor implementor; 3 4 public Implementor getImplementor() { 5 return implementor; 6 } 7 8 public void setImplementor(Implementor implementor) { 9 this.implementor = implementor; 10 } 11 12 protected void operation(){ 13 implementor.operation(); 14 } 15 }
下面是Abstraction類的子類RefinedAbstraction:
1 public class RefinedAbstraction extends Abstraction { 2 @Override 3 protected void operation() { 4 super.getImplementor().operation(); 5 } 6 }
下面給出測試類:
1 public class BridgeTest { 2 public static void main(String[] args) { 3 Abstraction abstraction = new RefinedAbstraction(); 4 5 //調用第一個實現類 6 abstraction.setImplementor(new ConcreateImplementorA()); 7 abstraction.operation(); 8 9 //調用第二個實現類 10 abstraction.setImplementor(new ConcreateImplementorB()); 11 abstraction.operation(); 12 13 } 14 }
運行結果如下:
這樣,通過對Abstraction橋接類的調用,實現了對接口Implementor的實現類ConcreteImplementorA和ConcreteImplementorB的調用。實現了抽象與行為實現的分離。
總結:
1.橋接模式的優點
(1)實現了抽象和實現部分的分離
橋接模式分離了抽象部分和實現部分,從而極大的提供了系統的靈活性,讓抽象部分和實現部分獨立開來,分別定義接口,這有助於系統進行分層設計,從而產生更好的結構化系統。對於系統的高層部分,只需要知道抽象部分和實現部分的接口就可以了。
(2)更好的可擴展性
由於橋接模式把抽象部分和實現部分分離了,從而分別定義接口,這就使得抽象部分和實現部分可以分別獨立擴展,而不會相互影響,大大的提供了系統的可擴展性。
(3)可動態的切換實現
由於橋接模式實現了抽象和實現的分離,所以在實現橋接模式時,就可以實現動態的選擇和使用具體的實現。
(4)實現細節對客戶端透明,可以對用戶隱藏實現細節。
2.橋接模式的缺點
(1)橋接模式的引入增加了系統的理解和設計難度,由於聚合關聯關系建立在抽象層,要求開發者針對抽象進行設計和編程。
(2)橋接模式要求正確識別出系統中兩個獨立變化的維度,因此其使用範圍有一定的局限性。
java面試題之----jdbc中使用的設計模式(橋接模式)