###場景分析 商城系統中常見的商品分類,以電腦爲例,如何良好的處理商品分類銷售的問題?編程
這個場景有兩個維度:電腦類型、電腦品牌。 ###模式定義:ide
將抽獎部分與它的實現部分分離,使它們均可以獨立地變化。設計
###模式結構 code
###代碼實現繼承
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("賣聯想牌"); } } 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(); } }
###模式的優缺點 ####模式的優勢接口
分離抽象接口及其實現部分。開發
橋接模式有時相似於多繼承方案,可是多繼承方案違背了類的單一職責原則(即一個類只有一個變化的緣由),複用性比較差,並且多繼承結構中類的個數很是龐大,橋接模式是比多繼承方案更好的解決方法。class
橋接模式提升了系統的可擴充性,在兩個變化維度中任意擴展一個維度,都不須要修改原有系統。擴展
實現細節對客戶透明,能夠對用戶隱藏實現細節。程序
####模式的缺點
橋接模式的引入會增長系統的理解與設計難度,因爲聚合關聯關係創建在抽象層,要求開發者針對抽象進行設計與編程。
橋接模式要求正確識別出系統中兩個獨立變化的維度,所以其使用範圍具備必定的侷限性。
###思考
模式本質:分離抽象和實現。
處理多層繼承結果,處理多維度變化的場景,將各個維度設計成獨立的繼承結構,使得各個維度能夠獨立的擴展在抽象層創建的關係。
###開發中的應用場景
若是不但願在抽象部分和實現部分採用固定的綁定關係,能夠採用橋接模式,能夠把抽象部分和實現部分分開,而後程序運行期間動態地設置抽象部分須要用到的具體的實現。
若是出現抽象部分和實現部分都可以擴展的狀況,能夠採用橋接模式,讓抽象部分和實現部分獨立的變化,從而靈活的進行單獨擴展。
若是但願實現部分的修改不會對客戶端產生影響,能夠採用橋接模式。
若是採用繼承的實現方案,會致使產生不少子類,對於這種狀況,能夠考慮採用橋接模式。