連接兩地的交通樞紐——橋接模式

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();
代碼邏輯很簡單 ,不難理解!然而呢,這個模式的應用確實不多,一個很重要的原因就是對於抽象與實現分離的把握,是不是需要分離?如何分離,對設計者來說要有一個恰到好的分寸!不管怎麼說,橋連接模式的優點是毋庸置疑的,分離抽象與實現,靈活的擴展以及對客戶來說透明的實現。

總結一句話:橋接模式應用來說理解很簡單,但是設計很不容易!!!(當然對我這種還是比較菜的菜鳥來說)



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章