1. 程式人生 > >java面試題之----jdbc中使用的設計模式(橋接模式)

java面試題之----jdbc中使用的設計模式(橋接模式)

connect @override 操作 tro orb his order ng- return

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中使用的設計模式(橋接模式)