橋接模式:將抽象部分與它的實現部分相分離,使他們能夠獨立的變化。html
特徵:java
- 三個關鍵詞,也就是抽象化、實現化和脫耦
- 橋接模式將抽象部分和實現部分分離,解耦
- 兩個維度,獨立變化,靈活的擴展
簡書:Android 設計模式之橋接模式web
public abstract class Coffee { protected CoffeeAdditives impl; public Coffee (CoffeeAdditives impl) { this.impl = impl; } /** * 咖啡具體是什麼樣的由子類決定 */ public abstract void makeCoffee(); }
//大杯咖啡 public class LargeCoffee extends Coffee { public LargeCoffee(CoffeeAdditives coffeeAdditives) { super(coffeeAdditives); } @Override public void makeCoffee() { System.out.println("大杯的" + impl.addSomething() + "咖啡"); } }
//小杯咖啡 public class SmallCoffee extends Coffee { public SmallCoffee(CoffeeAdditives coffeeAdditives) { super(coffeeAdditives); } @Override public void makeCoffee() { System.out.println("小杯的" + impl.addSomething() + "咖啡"); } }
public abstract class CoffeeAdditives { /** * 具體添加什麼東西由子類決定 * * @return 添加的東西,好比加糖 */ public abstract String addSomething(); }
//加糖 public class Sugar extends CoffeeAdditives { @Override public String addSomething() { return "加糖"; } }
//不加糖,這裏就是原味了 public class Ordinary extends CoffeeAdditives { @Override public String addSomething() { return "原味"; } }
//原味 Ordinary ordinary = new Ordinary(); //加糖 Sugar sugar = new Sugar(); //大杯咖啡,原味 LargeCoffee largeCoffee = new LargeCoffee(ordinary); largeCoffee.makeCoffee(); //小杯咖啡,原味 SmallCoffee smallCoffee = new SmallCoffee(ordinary); smallCoffee.makeCoffee(); //大杯咖啡,加糖 LargeCoffee largeCoffeeSugar = new LargeCoffee(sugar); largeCoffeeSugar.makeCoffee(); //小杯咖啡,加糖 SmallCoffee smallCoffeeSugar = new SmallCoffee(sugar); smallCoffeeSugar.makeCoffee();
大杯的原味咖啡
小杯的原味咖啡
大杯的加糖咖啡
小杯的加糖咖啡編程
經過以上的例子咱們能夠看出橋接模式可以分離抽象與實現,並且擴展也很靈活。好比咱們須要添加個中杯的咖啡,只須要在抽象部分,也就是寫個Coffee的子類MiddleCoffee就好了,而實現部分,CoffeeAdditives則不受影響。若是咖啡須要加鹽或是其餘什麼的一樣也很簡單。segmentfault
優勢:
一、抽象和實現的分離。
二、優秀的擴展能力。
三、實現細節對客戶透明。設計模式
缺點:橋接模式的引入會增長系統的理解與設計難度,因爲聚合關聯關係創建在抽象層,要求開發者針對抽象進行設計與編程。ide
AbsListView跟ListAdapter之間就是一個橋接模式。
另外,Window 與 WindowManager 之間也是橋接模式。svg
segmentfault: 橋接模式
菜鳥教程:橋接模式
百度百科:橋接模式
博客園:《JAVA與模式》之橋樑模式
簡書:Android 設計模式之橋接模式this