一翁垂、介紹
當系統(tǒng)中存在多個維度的變量相互依賴铆遭,且又要能獨立的變化、拓展沿猜,傳統(tǒng)多級繼承方案會出現(xiàn)類爆炸的情況枚荣,且子類代碼高度相似,當一級子類需要拓展時啼肩,相應的二級子類都需要做出修改棍弄,不符合類得單一職責原則,因為二級子類繼承了一級子類疟游,同時兼具了一級和二級功能。處理這種由于系統(tǒng)多級繼承導致的類急劇增加問題痕支,橋接模式尤為適用颁虐。橋接模式將不同維度的變量抽象出來,放在不同的類層次中卧须,使它們互相獨立另绩,獨自負責各自的功能拓展,再通過組合這種相比繼承要低耦合的關聯(lián)方式將不同維度的變量結(jié)合在一起花嘶。
二笋籽、模式
1、傳統(tǒng)模式UML
傳統(tǒng)模式中椭员,當Computer品牌再增加一個车海,那么相應的二級處理器類需要增加兩個,如果再多一級顯卡驅(qū)動(集顯隘击、獨顯)侍芝,那么整個系統(tǒng)的類數(shù)量將呈指數(shù)級增加研铆,出現(xiàn)類爆炸的情況,而且當一級子類修改功能時州叠,二級子類也需要修改棵红,對于二級子類來說不符合單一職責原則。
2咧栗、橋接模式UML
CPU從Computer中分離出來逆甜,分處兩個不同的層級,CPU以組合的方式集成到Conputer中致板,這樣當CPU或者Computer需要拓展時交煞,都不需要關注對象的情況,而且也不會出現(xiàn)類爆炸的情況可岂。
三错敢、代碼實例
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é)
橋接模式抽象了相互依賴的模塊缕粹,分離抽象和實現(xiàn)稚茅,模塊之間以組合的方式關聯(lián)起來,對于高層來說平斩,只關心抽象部分亚享,具體業(yè)務細節(jié)由子類去實現(xiàn),解決了多層繼承方案帶來的類爆炸問題和不符合單一職責原則問題绘面,使得系統(tǒng)便于拓展欺税、易維護。