設(shè)計(jì)模式-BRIDGE(橋接模式)

代碼示例:https://github.com/elfc/patterns

分類

類對(duì)象結(jié)構(gòu)型

意圖

將抽象部分與它的實(shí)現(xiàn)部分分離勺择,使它們都可以獨(dú)立地變化。

動(dòng)機(jī)

Bridge 模式可以將一個(gè)復(fù)雜的組件分成兩個(gè)獨(dú)立的但又相關(guān)的繼承層次結(jié)構(gòu):功能性的抽象和內(nèi)部實(shí)現(xiàn)烂叔。改變組件的這兩個(gè)層次結(jié)構(gòu)很簡(jiǎn)單,以至于它們可以相互獨(dú)立地變化至扰。當(dāng)具有抽象的層次結(jié)構(gòu)和相應(yīng)的實(shí)現(xiàn)層次結(jié)構(gòu)時(shí)桦他,Bridge模式時(shí)非常有用的。除了可以將抽象和實(shí)現(xiàn)組合成許多不同的類霹期,該模式還可以以動(dòng)態(tài)組合的獨(dú)立類的形式實(shí)現(xiàn)這些抽象和實(shí)現(xiàn)叶组。

適用性

  • 想避免在抽象及其實(shí)現(xiàn)之間存在永久的綁定。
  • 抽象及其實(shí)現(xiàn)可以使用子類進(jìn)行擴(kuò)展历造。
  • 對(duì)一個(gè)抽象的實(shí)現(xiàn)部分的修改應(yīng)對(duì)客戶不產(chǎn)生影響甩十,即客戶的代碼不必重新編譯。

優(yōu)點(diǎn)

  • 可以將接口與實(shí)現(xiàn)相分離吭产。
  • 提高了可擴(kuò)展性侣监。
  • 對(duì)客戶端隱藏了實(shí)現(xiàn)的細(xì)節(jié)。

結(jié)構(gòu)

參與者

  • Abstraction
    -- 定義抽象類的接口臣淤。
    -- 維護(hù)一個(gè)指向Implementor類型對(duì)象的指針橄霉。
  • RefinedAbstraction
    -- 擴(kuò)充由Abstraction定義的接口。
  • Implementor
    -- 定義實(shí)現(xiàn)類的接口邑蒋,該接口不一定要與Abstraction的接口完全一致姓蜂;事實(shí)上這兩個(gè)接口可以完全不同。一般來說医吊,Implementor接口僅提供基本操作钱慢,而Abstraction則定義了基于這些基本操作的較高層次的操作。
  • ConcreteImplementor
    -- 實(shí)現(xiàn)Implementor接口并定義它的具體實(shí)現(xiàn)卿堂。

代碼示例

以一個(gè)畫圖為例束莫,用戶可以畫多種圖形(矩形, 三角形)Abstraction, 可以使用多種樣式的線畫(虛線草描、實(shí)線)Implementor


/**
 * Implementor
 * @author chunyuliu
 */
public interface Line {

    String style();
}
/**
 * ConcreteImplementor
 * @author chunyuliu
 */
public class DottedLine implements Line {

    @Override
    public String style() {
        return "虛線";
    }
}
/**
 * ConcreteImplementor
 * @author chunyuliu
 */
public class SolidLine implements Line {

    @Override
    public String style() {
        return "實(shí)線";
    }
}
/**
 * @author chunyuliu
 */
public abstract class Shape {

    protected Line line;

    public Shape(Line line) {
        this.line = line;
    }

    public abstract void draw();
}
/**
 * RefinedAbstraction
 * @author chunyuliu
 */
public class RectangleShape extends Shape {

    public RectangleShape(Line line) {
        super(line);
    }

    @Override
    public void draw() {
        System.out.println("矩形, 線樣式: " + line.style());
    }
}
/**
 * RefinedAbstraction
 * @author chunyuliu
 */
public class TriangleShape extends Shape {

    public TriangleShape(Line line) {
        super(line);
    }

    @Override
    public void draw() {
        System.out.println("三角形, 線樣式: " + line.style());
    }
}

測(cè)試用例

/**
 * @author chunyuliu
 */
public class BridgeTest {

    @Test
    public void shapeTest() {
        // 虛線畫矩形
        Shape dottedRectangle = new RectangleShape(new DottedLine());
        dottedRectangle.draw();
        // 實(shí)線畫矩形
        Shape solidRectangle = new RectangleShape(new SolidLine());
        solidRectangle.draw();

        // 虛線畫三角形
        Shape  dottedTriangle = new TriangleShape(new DottedLine());
        dottedTriangle.draw();
        // 實(shí)線畫三角形
        Shape solidTriangle = new RectangleShape(new SolidLine());
        solidTriangle.draw();
    }
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末览绿,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子陶珠,更是在濱河造成了極大的恐慌挟裂,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,640評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件揍诽,死亡現(xiàn)場(chǎng)離奇詭異诀蓉,居然都是意外死亡栗竖,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,254評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門渠啤,熙熙樓的掌柜王于貴愁眉苦臉地迎上來狐肢,“玉大人,你說我怎么就攤上這事沥曹》菝” “怎么了?”我有些...
    開封第一講書人閱讀 165,011評(píng)論 0 355
  • 文/不壞的土叔 我叫張陵妓美,是天一觀的道長(zhǎng)僵腺。 經(jīng)常有香客問我,道長(zhǎng)壶栋,這世上最難降的妖魔是什么辰如? 我笑而不...
    開封第一講書人閱讀 58,755評(píng)論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮贵试,結(jié)果婚禮上琉兜,老公的妹妹穿的比我還像新娘。我一直安慰自己毙玻,他們只是感情好豌蟋,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,774評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著桑滩,像睡著了一般梧疲。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上施符,一...
    開封第一講書人閱讀 51,610評(píng)論 1 305
  • 那天往声,我揣著相機(jī)與錄音,去河邊找鬼戳吝。 笑死,一個(gè)胖子當(dāng)著我的面吹牛贯涎,可吹牛的內(nèi)容都是我干的听哭。 我是一名探鬼主播,決...
    沈念sama閱讀 40,352評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼塘雳,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼陆盘!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起败明,我...
    開封第一講書人閱讀 39,257評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤隘马,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后妻顶,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體酸员,經(jīng)...
    沈念sama閱讀 45,717評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡蜒车,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,894評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了幔嗦。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片酿愧。...
    茶點(diǎn)故事閱讀 40,021評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖邀泉,靈堂內(nèi)的尸體忽然破棺而出嬉挡,到底是詐尸還是另有隱情,我是刑警寧澤汇恤,帶...
    沈念sama閱讀 35,735評(píng)論 5 346
  • 正文 年R本政府宣布庞钢,位于F島的核電站,受9級(jí)特大地震影響因谎,放射性物質(zhì)發(fā)生泄漏焊夸。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,354評(píng)論 3 330
  • 文/蒙蒙 一蓝角、第九天 我趴在偏房一處隱蔽的房頂上張望阱穗。 院中可真熱鬧,春花似錦使鹅、人聲如沸揪阶。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,936評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽鲁僚。三九已至,卻和暖如春裁厅,著一層夾襖步出監(jiān)牢的瞬間冰沙,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,054評(píng)論 1 270
  • 我被黑心中介騙來泰國(guó)打工执虹, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留拓挥,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,224評(píng)論 3 371
  • 正文 我出身青樓袋励,卻偏偏與公主長(zhǎng)得像侥啤,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子茬故,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,974評(píng)論 2 355

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

  • 將類的功能層次結(jié)構(gòu)與實(shí)現(xiàn)層次結(jié)構(gòu)分離 Bridge 模式 Bridge 模式的作用是將類的功能層次結(jié)構(gòu)和類的實(shí)現(xiàn)層...
    Ginger12閱讀 746評(píng)論 0 0
  • 1.初識(shí)橋接模式 將抽象部分與它的實(shí)現(xiàn)部分分離盖灸,使它們都可以獨(dú)立地變化。 Abstraction:抽象部分的接口磺芭。...
    王偵閱讀 916評(píng)論 0 7
  • 一赁炎、橋接模式(Bridge Pattern) 在現(xiàn)實(shí)生活中,某些類具有兩個(gè)或多個(gè)維度的變化钾腺,如圖形既可按形狀分徙垫,又...
    dongrui100閱讀 535評(píng)論 0 0
  • 一讥裤、應(yīng)用場(chǎng)景 設(shè)想如果要繪制矩形、圓形松邪、橢圓坞琴、正方形,我們至少需要4個(gè)形狀類逗抑,但是如果繪制的圖形需要具有不同的顏色...
    QuantRuu閱讀 784評(píng)論 0 51
  • 定義 橋接模式的用意是將抽象化(Abstraction)與實(shí)現(xiàn)化(Implementation)脫耦剧辐,使得二者可以...
    易兒善閱讀 699評(píng)論 1 3