橋接模式就是把事物和其具體實(shí)現(xiàn)分開(kāi)囊嘉,使他們可以各自獨(dú)立的變化捌显。橋接的用意是:將抽象化與實(shí)現(xiàn)化解耦俱箱,使得二者可以獨(dú)立變化,像我們常用的JDBC橋DriverManager一樣些椒,JDBC進(jìn)行連接數(shù)據(jù)庫(kù)的時(shí)候播瞳,在各個(gè)數(shù)據(jù)庫(kù)之間進(jìn)行切換,基本不需要?jiǎng)犹嗟拇a免糕,甚至絲毫不用動(dòng)赢乓,原因就是JDBC提供統(tǒng)一接口,每個(gè)數(shù)據(jù)庫(kù)提供各自的實(shí)現(xiàn)石窑,用一個(gè)叫做數(shù)據(jù)庫(kù)驅(qū)動(dòng)的程序來(lái)橋接就行了牌芋。我們來(lái)看看關(guān)系圖:
實(shí)現(xiàn)代碼:
先定義接口:
[java] view plain copy
public interface Sourceable {
public void method();
}
分別定義兩個(gè)實(shí)現(xiàn)類:
[java] view plain copy
public class SourceSub1 implements Sourceable {
@Override
public void method() {
System.out.println("this is the first sub!");
}
}
[java] view plain copy
public class SourceSub2 implements Sourceable {
@Override
public void method() {
System.out.println("this is the second sub!");
}
}
定義一個(gè)橋,持有Sourceable的一個(gè)實(shí)例:
[java] view plain copy
public abstract class Bridge {
private Sourceable source;
public void method(){
source.method();
}
public Sourceable getSource() {
return source;
}
public void setSource(Sourceable source) {
this.source = source;
}
}
[java] view plain copy
public class MyBridge extends Bridge {
public void method(){
getSource().method();
}
}
測(cè)試類:
[java] view plain copy
public class BridgeTest {
public static void main(String[] args) {
Bridge bridge = new MyBridge();
/*調(diào)用第一個(gè)對(duì)象*/
Sourceable source1 = new SourceSub1();
bridge.setSource(source1);
bridge.method();
/*調(diào)用第二個(gè)對(duì)象*/
Sourceable source2 = new SourceSub2();
bridge.setSource(source2);
bridge.method();
}
}
output:
this is the first sub!
this is the second sub!
這樣松逊,就通過(guò)對(duì)Bridge類的調(diào)用躺屁,實(shí)現(xiàn)了對(duì)接口Sourceable的實(shí)現(xiàn)類SourceSub1和SourceSub2的調(diào)用。接下來(lái)我再畫個(gè)圖经宏,大家就應(yīng)該明白了犀暑,因?yàn)檫@個(gè)圖是我們JDBC連接的原理,有數(shù)據(jù)庫(kù)學(xué)習(xí)基礎(chǔ)的烁兰,一結(jié)合就都懂了耐亏。