設(shè)計模式《橋接模式》

引言

??咋一看這個模式,看的一頭懵逼霍弹,純概念很來理解。舉個例子吧 就像一座橋娃弓,鏈接兩端典格。先回顧上一節(jié)的裝飾模式,下面我們來細(xì)說這個橋接模式台丛。

示例地址

??Demo

類圖

image

定義

??將抽象部分與實現(xiàn)部分分離钝计,使它們都可以獨立進行變化。

使用場景

??從模式的定義中我們大致可以了解到齐佳,這里"橋梁"的作用其實就是連接“抽象部分”與“實現(xiàn)部分”私恬,但是事實上,任何多維度變化類或者說多個樹狀類之間的耦合都可以使用橋接模式來實現(xiàn)解耦炼吴。
??如果一個系統(tǒng)需要在構(gòu)建的抽象化角色和具體化角色之間增加更多的靈活性本鸣,避免在兩個層次之間建立靜態(tài)的繼承聯(lián)系,可以通過橋接模式使他們在抽象層建立一個關(guān)聯(lián)關(guān)系硅蹦。
??對于那些不希望使用繼承或因為多層次繼承導(dǎo)致系統(tǒng)類的個數(shù)急劇增加的系統(tǒng)荣德,也可以考慮用橋接模式。
??一個類存在兩個獨立變化的維度童芹,且這兩個維度都需要進行擴展涮瞻。

橋接模式示例

??我們在使用ppt畫圖的時候,可以繪制圓形、正方形假褪、三角形署咽。
然后我們一個填充不同的顏色,例如白色、黑色生音、紅色宁否。這樣就生成了3*3=9種,如果我們按照繼承的方式實現(xiàn)的話。要生成9個類缀遍,如果我多一種顏色的話慕匠,就需要重新寫3個類。

繼承方式實現(xiàn)

1. 定義形狀類
/**
 * 形狀
 *
 * @author 512573717@qq.com
 * @created 2018/7/27  下午4:03.
 */
public abstract class Shape {

    public abstract void draw();
}
2. 正方形的實現(xiàn)
/**
 * 正方形
 *
 * @author 512573717@qq.com
 * @created 2018/7/27  下午4:06.
 */
public class Square extends Shape {
    @Override
    public void draw() {
        System.out.println("正方形");
    }
}
3. 圓形的實現(xiàn)
/**
 * 圓形
 *
 * @author 512573717@qq.com
 * @created 2018/7/27  下午4:05.
 */
public class Circle extends Shape {
    @Override
    public void draw() {
        System.out.println("圓形");
    }
}
4. 白色的正方形
/**
 * 白色的正方形
 *
 * @author 512573717@qq.com
 * @created 2018/7/27  下午4:10.
 */
public class WhiteSquare extends Square {
    @Override
    public void draw() {
        System.out.print("白色的");
        super.draw();
    }
}
5. 紅色的正方形
/**
 * 紅色的正方形
 *
 * @author 512573717@qq.com
 * @created 2018/7/27  下午4:11.
 */
public class RedSquare extends Square {
    @Override
    public void draw() {
        System.out.print("紅色的");
        super.draw();
    }
}
6. 白色的圓形
/**
 * 白色的圓形
 *
 * @author 512573717@qq.com
 * @created 2018/7/27  下午4:07.
 */
public class WhiteCircle extends Circle {

    @Override
    public void draw() {
        System.out.print("白色的");
        super.draw();

    }
}
7. 紅色的圓形
/**
 * 紅色的圓形
 *
 * @author 512573717@qq.com
 * @created 2018/7/27  下午4:09.
 */
public class RedCircle extends  Circle {
    @Override
    public void draw() {
        System.out.print("紅色的");
        super.draw();
    }
}
8. Client
 // 方式一 通過繼承
 WhiteSquare whiteSquare = new WhiteSquare();
 whiteSquare.draw();

 WhiteCircle whiteCircle = new WhiteCircle();
 whiteCircle.draw();
9. 缺點

??1. 采用了多層繼承結(jié)構(gòu)域醇,導(dǎo)致系統(tǒng)中類的個數(shù)急劇增加台谊,系統(tǒng)擴展麻煩。
??2. 不利于擴展譬挚,增加一個新的顏色圖形時锅铅,需要新增類。

橋接模式

1. 定義形狀類
/**
 * 形狀
 * 
 * @author 512573717@qq.com
 
 * @created 2018/7/27  下午3:27.
 * 
 */
public  abstract  class Shape {

   protected  IColor mIColor;

    public void setIColor(IColor IColor) {
        mIColor = IColor;
    }

    public abstract void draw();
}
2. 顏色接口
/**
 *  顏色的接口
 * 
 * @author 512573717@qq.com
 
 * @created 2018/7/27  下午3:29.
 * 
 */
public interface IColor {

    void getColor();
}
3. 圓形
/**
 * 圓形
 *
 * @author 512573717@qq.com
 * @created 2018/7/27  下午3:38.
 */
public class Circle extends Shape {
    @Override
    public void draw() {
        mIColor.getColor();
        System.out.println("圓形...");
    }
}
4. 正方形
/**
 * 正方形
 *
 * @author 512573717@qq.com

 * @created 2018/7/27  下午3:39.
 *
 */
public class Square extends  Shape {
    @Override
    public void draw() {
        mIColor.getColor();
        System.out.println("正方形...");
    }
}
5. 白色的實現(xiàn)
/**
 * 白色
 * 
 * @author 512573717@qq.com
 
 * @created 2018/7/27  下午3:38.
 * 
 */
public class WhiteColor implements  IColor {
    @Override
    public void getColor() {
        System.out.print("白色的");
    }
}
6. 紅色的實現(xiàn)
/**
 *  紅色
 * 
 * @author 512573717@qq.com
 
 * @created 2018/7/27  下午3:35.
 * 
 */
public class RedColor implements IColor {
    @Override
    public void getColor() {
        System.out.print("紅色的");
    }
}
7. Client
   //方式二:橋接模式
  //白色
  IColor white = new WhiteColor();

  //白色的正方形
  Shape square = new Square();
  square.setIColor(white);
  square.draw();

  //白色的圓形
  Shape circle = new Circle();
  circle.setIColor(white);
  circle.draw();

總結(jié)

??1. 分離抽象接口及其實現(xiàn)部分殴瘦。所謂抽象和實現(xiàn)沿著各自維度的變化狠角,也就是說抽象和實現(xiàn)不再在同一個繼承層次結(jié)構(gòu)中,而是“子類化”它們蚪腋,使它們各自都具有自己的子類丰歌,以便任何組合子類姨蟋,從而獲得多維度組合對象。
??2. 橋接模式提高了系統(tǒng)的可擴展性立帖,在兩個變化維度中任意擴展一個維度眼溶,都不需要修改原有系統(tǒng),符合“開閉原則”晓勇。

參考鏈接

設(shè)計模式讀書筆記-----橋接模式

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末堂飞,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子绑咱,更是在濱河造成了極大的恐慌绰筛,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,692評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件描融,死亡現(xiàn)場離奇詭異铝噩,居然都是意外死亡,警方通過查閱死者的電腦和手機窿克,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,482評論 3 392
  • 文/潘曉璐 我一進店門骏庸,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人年叮,你說我怎么就攤上這事具被。” “怎么了只损?”我有些...
    開封第一講書人閱讀 162,995評論 0 353
  • 文/不壞的土叔 我叫張陵一姿,是天一觀的道長。 經(jīng)常有香客問我改执,道長啸蜜,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,223評論 1 292
  • 正文 為了忘掉前任辈挂,我火速辦了婚禮,結(jié)果婚禮上裹粤,老公的妹妹穿的比我還像新娘终蒂。我一直安慰自己,他們只是感情好遥诉,可當(dāng)我...
    茶點故事閱讀 67,245評論 6 388
  • 文/花漫 我一把揭開白布拇泣。 她就那樣靜靜地躺著,像睡著了一般矮锈。 火紅的嫁衣襯著肌膚如雪霉翔。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,208評論 1 299
  • 那天苞笨,我揣著相機與錄音债朵,去河邊找鬼子眶。 笑死,一個胖子當(dāng)著我的面吹牛序芦,可吹牛的內(nèi)容都是我干的臭杰。 我是一名探鬼主播,決...
    沈念sama閱讀 40,091評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼谚中,長吁一口氣:“原來是場噩夢啊……” “哼渴杆!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起宪塔,我...
    開封第一講書人閱讀 38,929評論 0 274
  • 序言:老撾萬榮一對情侶失蹤磁奖,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后某筐,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體比搭,經(jīng)...
    沈念sama閱讀 45,346評論 1 311
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,570評論 2 333
  • 正文 我和宋清朗相戀三年来吩,在試婚紗的時候發(fā)現(xiàn)自己被綠了敢辩。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,739評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡弟疆,死狀恐怖戚长,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情怠苔,我是刑警寧澤同廉,帶...
    沈念sama閱讀 35,437評論 5 344
  • 正文 年R本政府宣布,位于F島的核電站柑司,受9級特大地震影響迫肖,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜攒驰,卻給世界環(huán)境...
    茶點故事閱讀 41,037評論 3 326
  • 文/蒙蒙 一蟆湖、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧玻粪,春花似錦隅津、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,677評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至很洋,卻和暖如春充蓝,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,833評論 1 269
  • 我被黑心中介騙來泰國打工谓苟, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留官脓,地道東北人。 一個月前我還...
    沈念sama閱讀 47,760評論 2 369
  • 正文 我出身青樓娜谊,卻偏偏與公主長得像确买,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子纱皆,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,647評論 2 354

推薦閱讀更多精彩內(nèi)容