場景分析
商城系統(tǒng)中常見的商品分類,以電腦為例,如何良好的處理商品分類銷售的問題?
這個場景有兩個維度:電腦類型、電腦品牌。

模式定義:
將抽獎部分與它的實現(xiàn)部分分離,使它們都可以獨立地變化。
模式結(jié)構(gòu)

代碼實現(xiàn)
public interface Brand {
void sale();
}
public class Dell implements Brand {
public void sale() {
System.out.print("賣戴爾牌");
}
}
public class Lenovo implements Brand {
public void sale() {
System.out.print("賣聯(lián)想牌");
}
}
public abstract class Computer {
public abstract void sale();
}
@AllArgsConstructor
public class Laptop extends Computer {
private Brand brand;
@Override
public void sale() {
brand.sale();
System.out.println("筆記本");
}
}
@AllArgsConstructor
public class DesktopComputer extends Computer {
private Brand brand;
@Override
public void sale() {
brand.sale();
System.out.println("臺式機");
}
}
public class Client {
public static void main(String[] args) {
Brand brand = new Dell();
Computer computer = new DesktopComputer(brand);
computer.sale();
}
}
模式的優(yōu)缺點
模式的優(yōu)點
分離抽象接口及其實現(xiàn)部分。
橋接模式有時類似于多繼承方案,但是多繼承方案違背了類的單一職責(zé)原則(即一個類只有一個變化的原因),復(fù)用性比較差,而且多繼承結(jié)構(gòu)中類的個數(shù)非常龐大,橋接模式是比多繼承方案更好的解決方法。
橋接模式提高了系統(tǒng)的可擴充性,在兩個變化維度中任意擴展一個維度,都不需要修改原有系統(tǒng)。
實現(xiàn)細節(jié)對客戶透明,可以對用戶隱藏實現(xiàn)細節(jié)。
模式的缺點
橋接模式的引入會增加系統(tǒng)的理解與設(shè)計難度,由于聚合關(guān)聯(lián)關(guān)系建立在抽象層,要求開發(fā)者針對抽象進行設(shè)計與編程。
橋接模式要求正確識別出系統(tǒng)中兩個獨立變化的維度,因此其使用范圍具有一定的局限性。
思考
模式本質(zhì):分離抽象和實現(xiàn)。
處理多層繼承結(jié)果,處理多維度變化的場景,將各個維度設(shè)計成獨立的繼承結(jié)構(gòu),使得各個維度可以獨立的擴展在抽象層建立的關(guān)系。
開發(fā)中的應(yīng)用場景
如果不希望在抽象部分和實現(xiàn)部分采用固定的綁定關(guān)系,可以采用橋接模式,可以把抽象部分和實現(xiàn)部分分開,然后程序運行期間動態(tài)地設(shè)置抽象部分需要用到的具體的實現(xiàn)。
如果出現(xiàn)抽象部分和實現(xiàn)部分都能夠擴展的情況,可以采用橋接模式,讓抽象部分和實現(xiàn)部分獨立的變化,從而靈活的進行單獨擴展。
如果希望實現(xiàn)部分的修改不會對客戶端產(chǎn)生影響,可以采用橋接模式。
如果采用繼承的實現(xiàn)方案,會導(dǎo)致產(chǎn)生很多子類,對于這種情況,可以考慮采用橋接模式。