1、橋連接模式的定義
將抽象部分與實現部分分離,使他們都可以獨立的進行變化。
2、橋連接模式的使用場景
簡單說就是一個類存在兩份獨立變化的維度,且這兩個維度都需要進行擴展。
3、橋連接模式的圖解
ps:現實中有的人喜歡喝咖啡,咖啡一般分爲四種:大杯加糖、大杯原味、小杯加糖、小杯原味。以這個爲例子 進行圖解。
4、橋連接模式的代碼解釋
A: abstration---->抽象部分
先定義一個抽象的Coffee類,裏面維護一個加糖還是不加糖的CoffeeAdditives一個實現類,具體加入啥有CoffeeAdditives的子類決定,但是杯子的大小是由Coffee的子類控制的
/** * Created by LuanXianSheng on 2017/3/1. * 定義一個咖啡的抽象類,咖啡分爲大杯加糖 大杯原味 小杯加糖 小杯原味 */ public abstract class Coffee { //實現部分,具體往咖啡裏面加什麼 protected CoffeeAdditives ipml ; public Coffee(CoffeeAdditives ipml){ this.ipml = ipml ; } /** * 什麼大小的咖啡由子類實現 */ public abstract void makeCoffee(); }
子類1:大杯的
/** * Created by LuanXianSheng on 2017/3/1. */ public class LargeCoffee extends Coffee { private CoffeeAdditives ipml ; public LargeCoffee(CoffeeAdditives ipml) { super(ipml); this.ipml =ipml; } @Override public void makeCoffee() { Log.i("Log","LargeCoffee:"+"大杯"+ipml.addSomething()+"的咖啡") ; } }
子類2:小杯的
/** * Created by LuanXianSheng on 2017/3/1. */ public class SmallCoffee extends Coffee { private CoffeeAdditives ipml ; public SmallCoffee(CoffeeAdditives ipml) { super(ipml); this.ipml =ipml; } @Override public void makeCoffee() { Log.i("Log","SmallCoffee:"+"小杯"+ipml.addSomething()+"的咖啡") ; } }
B: implementor---->實現部分
具體往Coffee裏面加不加糖
/** * Created by LuanXianSheng on 2017/3/1. * 實現部分 具體往杯子裏面加不加東西由子類實現 */ public abstract class CoffeeAdditives { public abstract String addSomething(); }
子類1:加糖
public class Suger extends CoffeeAdditives { @Override public String addSomething() { return "加糖"; } }
子類2:原味
public class Ordinary extends CoffeeAdditives { @Override public String addSomething() { return "原味"; } }
C:應用:
//加糖 Suger suger = new Suger() ; //原味 Ordinary ordinary = new Ordinary(); //大杯加糖 LargeCoffee ls = new LargeCoffee(suger); ls.makeCoffee(); //大杯原味 LargeCoffee lo = new LargeCoffee(ordinary); lo.makeCoffee(); //小杯加糖 SmallCoffee ss = new SmallCoffee(suger) ; ss.makeCoffee(); //小杯原味 SmallCoffee so = new SmallCoffee(suger) ; so.makeCoffee();代碼邏輯很簡單 ,不難理解!然而呢,這個模式的應用確實不多,一個很重要的原因就是對於抽象與實現分離的把握,是不是需要分離?如何分離,對設計者來說要有一個恰到好的分寸!不管怎麼說,橋連接模式的優點是毋庸置疑的,分離抽象與實現,靈活的擴展以及對客戶來說透明的實現。
總結一句話:橋接模式應用來說理解很簡單,但是設計很不容易!!!(當然對我這種還是比較菜的菜鳥來說)