橋接模式——七種結(jié)構(gòu)型模式之一

1.前言


通過前面的學習晤碘,可以發(fā)現(xiàn):當一個對象持有另一個對象時,其實可以理解為兩個對象進行了關(guān)聯(lián)友题。這種關(guān)系不像類的繼承是靜態(tài)的嗤堰、不可變得,相反具有很高的靈活性度宦,是常見的解耦方式踢匣。當耦合度低時,持有者和被持有者可以獨立變化戈抄,甚至進行擴展离唬,而不會相互影響。

2.概念


橋接模式將抽象部分與實現(xiàn)部分分離划鸽,使它們都可以獨立地進行變化输莺。其中,“橋接”就是指以橋梁的方式進行連接裸诽,而連接的對象是分離后的抽象部分與實現(xiàn)部分嫂用。

一個類的屬性各自發(fā)生著變化,并對類產(chǎn)生著影響丈冬,說明它有不同維度的改變嘱函,而“抽象”、“實現(xiàn)”就是這樣的兩個維度埂蕊。以杯裝咖啡舉個例子往弓,若將它抽象為類,則有屬性杯子和咖啡蓄氧。有點不同的是函似,在橋接模式中,“杯裝咖啡”對象實際只有杯子的功能匀们,通過持有“咖啡”對象具有了完整的功能缴淋。下面的場景中,注意與裝飾模式進行比較泄朴。

3.場景


有一天去咖啡店重抖,你點了杯咖啡。店員肯定會問你祖灰,想要什么咖啡钟沛,你可以選擇藍山的、拿鐵的局扶、不加糖的等恨统;選完后叁扫,有的店員還會問,你喜歡什么樣的杯子畜埋,可以是玻璃的莫绣、陶瓷的、印花的等悠鞍。

4.寫法


// 1.定義實現(xiàn)部分对室,通常為接口或抽象類
public interface Coffee {
    // 2.定義此維度的行為
    void make();
}
// 1.定義抽象部分,通常抽象類
public abstract class CupCoffee {

    // 2.持有實現(xiàn)部分咖祭,及相關(guān)操作
    private Coffee mCoffee;

    public CupCoffee(Coffee coffee) {
        mCoffee = coffee;
    }

    protected void make() {
        mCoffee.make();
    }

    // 3.定義此維度的行為掩宜,可完善和擴展
    public abstract void holder();
}

實現(xiàn)抽象部分和實現(xiàn)部分這兩個維度的具體邏輯,若有必要么翰,可進行完善和擴展牺汤。這里特別像裝飾模式,但請注意浩嫌,裝飾模式中檐迟,代理者和被代理者得實現(xiàn)相同的接口,而橋接模式的兩個部分是各自實現(xiàn)不同的抽象固该。

public class BlueMountain implements Coffee {
    @Override
    public void make() {
        System.out.println("做了份藍山咖啡");
    }
}

public class Latte implements Coffee {
    @Override
    public void make() {
        System.out.println("做了份拿鐵咖啡");
    }
}
public class Glass extends CupCoffee {
    public Glass(Coffee coffee) {
        super(coffee);
    }

    @Override
    public void holder() {
        make();
        System.out.println("用玻璃杯來裝");
    }
}

public class Ceramic extends CupCoffee {
    public Ceramic(Coffee coffee) {
        super(coffee);
    }

    @Override
    public void holder() {
        make();
        System.out.println("用陶瓷杯來裝");
    }
}

在使用時盡量使用接口或抽象類锅减,以降低耦合度,方便后期維護伐坏。

public class Client {
    public static void main(String[] args) {
        // 客戶可能選擇的邏輯
        Coffee blueMountain = new BlueMountain();
        new Glass(blueMountain).holder();
        Coffee latte = new Latte();
        new Ceramic(latte).holder();
    }
}

5.總結(jié)


橋接模式其實沒什么明顯的缺點怔匣,若真要算,也許在什么情況下使用不好把控桦沉。因為任何多維度變化類或者說多個樹狀類之間的耦合都可以使用橋接模式來解耦每瞒,那么是否需要分離、如何分離纯露,這種恰到好處的尺度把握很考驗經(jīng)驗剿骨。畢竟過度分離,會導致抽象類和接口爆炸性的增加埠褪,反而導致代碼的可閱讀性降低浓利,甚至影響用戶的使用。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末钞速,一起剝皮案震驚了整個濱河市贷掖,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌渴语,老刑警劉巖苹威,帶你破解...
    沈念sama閱讀 217,509評論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異驾凶,居然都是意外死亡牙甫,警方通過查閱死者的電腦和手機掷酗,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,806評論 3 394
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來窟哺,“玉大人泻轰,你說我怎么就攤上這事≡啻穑” “怎么了糕殉?”我有些...
    開封第一講書人閱讀 163,875評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長殖告。 經(jīng)常有香客問我,道長雳锋,這世上最難降的妖魔是什么黄绩? 我笑而不...
    開封第一講書人閱讀 58,441評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮玷过,結(jié)果婚禮上爽丹,老公的妹妹穿的比我還像新娘。我一直安慰自己辛蚊,他們只是感情好粤蝎,可當我...
    茶點故事閱讀 67,488評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著袋马,像睡著了一般初澎。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上虑凛,一...
    開封第一講書人閱讀 51,365評論 1 302
  • 那天碑宴,我揣著相機與錄音,去河邊找鬼桑谍。 笑死延柠,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的锣披。 我是一名探鬼主播贞间,決...
    沈念sama閱讀 40,190評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼雹仿!你這毒婦竟也來了增热?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,062評論 0 276
  • 序言:老撾萬榮一對情侶失蹤盅粪,失蹤者是張志新(化名)和其女友劉穎钓葫,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體票顾,經(jīng)...
    沈念sama閱讀 45,500評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡础浮,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,706評論 3 335
  • 正文 我和宋清朗相戀三年帆调,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片豆同。...
    茶點故事閱讀 39,834評論 1 347
  • 序言:一個原本活蹦亂跳的男人離奇死亡番刊,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出影锈,到底是詐尸還是另有隱情芹务,我是刑警寧澤,帶...
    沈念sama閱讀 35,559評論 5 345
  • 正文 年R本政府宣布鸭廷,位于F島的核電站枣抱,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏辆床。R本人自食惡果不足惜佳晶,卻給世界環(huán)境...
    茶點故事閱讀 41,167評論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望讼载。 院中可真熱鬧轿秧,春花似錦、人聲如沸咨堤。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,779評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽一喘。三九已至驱还,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間津滞,已是汗流浹背铝侵。 一陣腳步聲響...
    開封第一講書人閱讀 32,912評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留触徐,地道東北人咪鲜。 一個月前我還...
    沈念sama閱讀 47,958評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像撞鹉,于是被迫代替她去往敵國和親疟丙。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,779評論 2 354

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

  • 1 場景問題# 1.1 發(fā)送提示消息## 考慮這樣一個實際的業(yè)務功能:發(fā)送提示消息鸟雏∠斫迹基本上所有帶業(yè)務流程處理的系統(tǒng)...
    七寸知架構(gòu)閱讀 5,001評論 5 63
  • 設計模式匯總 一、基礎(chǔ)知識 1. 設計模式概述 定義:設計模式(Design Pattern)是一套被反復使用孝鹊、多...
    MinoyJet閱讀 3,944評論 1 15
  • 在正式介紹橋接模式之前炊琉,我先跟大家談談兩種常見文具的區(qū)別,它們是毛筆和蠟筆。假如我們需要大中小3種型號的畫筆苔咪,能夠...
    justCode_閱讀 1,767評論 0 7
  • Iterator模式 (迭代器) 一個一個遍歷 一個集合類可以遵守 Iterator 協(xié)議锰悼,并實現(xiàn)一個 Itera...
    SSBun閱讀 1,843評論 0 15
  • 今天周末,閑著沒事团赏,打卡一張五官中的耳朵箕般,依然先結(jié)構(gòu)后明暗!好想說夏天太陽好大舔清,坐在屋里開著電風扇還是汗流...
    冬日丶麋鹿閱讀 544評論 0 1