一、介紹
當(dāng)系統(tǒng)中存在多個(gè)維度的變量相互依賴,且又要能獨(dú)立的變化、拓展,傳統(tǒng)多級(jí)繼承方案會(huì)出現(xiàn)類爆炸的情況,且子類代碼高度相似,當(dāng)一級(jí)子類需要拓展時(shí),相應(yīng)的二級(jí)子類都需要做出修改,不符合類得單一職責(zé)原則,因?yàn)槎?jí)子類繼承了一級(jí)子類,同時(shí)兼具了一級(jí)和二級(jí)功能。處理這種由于系統(tǒng)多級(jí)繼承導(dǎo)致的類急劇增加問題,橋接模式尤為適用。橋接模式將不同維度的變量抽象出來,放在不同的類層次中,使它們互相獨(dú)立,獨(dú)自負(fù)責(zé)各自的功能拓展,再通過組合這種相比繼承要低耦合的關(guān)聯(lián)方式將不同維度的變量結(jié)合在一起。
二、模式
1、傳統(tǒng)模式UML

傳統(tǒng)模式中,當(dāng)Computer品牌再增加一個(gè),那么相應(yīng)的二級(jí)處理器類需要增加兩個(gè),如果再多一級(jí)顯卡驅(qū)動(dòng)(集顯、獨(dú)顯),那么整個(gè)系統(tǒng)的類數(shù)量將呈指數(shù)級(jí)增加,出現(xiàn)類爆炸的情況,而且當(dāng)一級(jí)子類修改功能時(shí),二級(jí)子類也需要修改,對(duì)于二級(jí)子類來說不符合單一職責(zé)原則。
2、橋接模式UML

CPU從Computer中分離出來,分處兩個(gè)不同的層級(jí),CPU以組合的方式集成到Conputer中,這樣當(dāng)CPU或者Computer需要拓展時(shí),都不需要關(guān)注對(duì)象的情況,而且也不會(huì)出現(xiàn)類爆炸的情況。
三、代碼實(shí)例
public abstract class Computer {
public Computer(CPU cpu) {
}
protected abstract void run();
}
public interface CPU {
String structure();
}
public class Asus extends Computer{
private CPU mCpu;
public Asus(CPU cpu) {
super(cpu);
mCpu = cpu;
}
public void setCpu(CPU cpu){
mCpu = cpu;
}
@Override
protected void run() {
System.out.println("華碩電腦搭載"+mCpu.structure());
}
}
public class CoreI3 implements CPU{
@Override
public String structure() {
return "酷睿i3處理器";
}
}
public class Main {
public static void main(String[] args){
Asus asus = new Asus(new CoreI3());
asus.run();
asus.setCpu(new CoreI5());
asus.run();
System.out.println("****************");
Lenovo lenovo = new Lenovo(new CoreI3());
lenovo.run();
lenovo.setCpu(new CoreI5());
lenovo.run();
}
}

四、總結(jié)
橋接模式抽象了相互依賴的模塊,分離抽象和實(shí)現(xiàn),模塊之間以組合的方式關(guān)聯(lián)起來,對(duì)于高層來說,只關(guān)心抽象部分,具體業(yè)務(wù)細(xì)節(jié)由子類去實(shí)現(xiàn),解決了多層繼承方案帶來的類爆炸問題和不符合單一職責(zé)原則問題,使得系統(tǒng)便于拓展、易維護(hù)。