


核心理解
橋接模式做了這樣一件事情:
就像圖中所示:如果想要一個聯想的台式電腦,那么就需要兩層繼承來拿到這個對象(類),第一這是低效率的,第二這是一種靜態的定死的方式,擴展性很差。橋接模式的思想是把抽象化和實現化進行解耦分離,比如說無論有多少個品牌,抽象來看它們都只是品牌,無論有多少種電腦,它們都只是電腦。這樣的話可以抽象出兩個維度,一個是類型、另一個是品牌。具體的實現就是自由組合:XX品牌的XX種類電腦。
優化:本來如果要這九種電腦需要3*3=9個類,現在需要這些電腦只需要3+3=6個類,如果數量級更大,橋接模式的好處可想而知,可以大大減少子類的個數!
根據依賴倒轉原則,實現要依賴抽象,所以首先會有一個抽象的電腦類,這個抽象類的子類是各種類型的電腦,其次需要一個電腦的品牌接口,實現這個接口的類是各種品牌!
這個抽象電腦類和品牌接口類是組合的關系,抽象電腦類通過Setter方法注入一個具體的電腦品牌對象,然后用其方法結合自身的電腦種類獲得這個品牌的各種類型的電腦!
補充:【抽象類和接口的區別】
含有abstract修飾符的class即為抽象類,abstract 類不能創建實例對象。含有abstract方法的類必須定義為abstract class,abstract class類中的方法不必是抽象的。abstract class類中定義抽象方法必須在具體(Concrete)子類中實現,所以,不能有抽象構造方法或抽象靜態方法。如果子類沒有實現抽象父類中的所有抽象方法,那么子類也必須定義為abstract類型。
接口(interface)可以說成是抽象類的一種特例,接口中的所有方法都必須是抽象的。接口中的方法定義默認為public abstract類型,接口中的成員變量類型默認為public static final。
下面比較一下兩者的語法區別:
-
抽象類可以有構造方法,接口中不能有構造方法。
-
抽象類中可以有普通成員變量,接口中沒有普通成員變量
-
抽象類中可以包含非抽象的普通方法,接口中的所有方法必須都是抽象的,不能有非抽象的普通方法。
-
抽象類中的抽象方法的訪問類型可以是public,protected和(默認類型,雖然
eclipse下不報錯,但應該也不行),但接口中的抽象方法只能是public類型的,並且默認即為public abstract類型。
- 抽象類中可以包含靜態方法,接口中不能包含靜態方法
- 抽象類和接口中都可以包含靜態成員變量,抽象類中的靜態成員變量的訪問類型可以任意,但接口中定義的變量只能是public static final類型,並且默認即為public static final類型。
- 一個類可以實現多個接口,但只能繼承一個抽象類。
