設(shè)計模式學(xué)習(xí)筆記04-Bridge模式

本文主要是看了《設(shè)計模式》做的筆記和思考,在此分享僅代表個人觀點疾捍,如有不對的地方歡迎批評和指正找前。

Bridge(橋接)模式

基礎(chǔ)

該模式著重解決的問題,是將整體中某個可能多變的部分抽象并分離调俘,使得需求改變時僅需改變抽象部分即可伶棒,改變后,使用方式不變脉漏。

Adapter模式用來幫助無關(guān)的類協(xié)同工作苞冯,它通常在系統(tǒng)設(shè)計完成后才會被使用。然而侧巨,Bridge模式則是在系統(tǒng)開始時就被使用,它使得抽象接口和實現(xiàn)部分可以獨立進(jìn)行改變鞭达。 ——《設(shè)計模式》

博客園一博主的圖片一用:

title

重點介紹下這些組件:

  • Client:使用者
  • Abstraction:抽象類(其實可以直接是實體類)司忱,并且使用Implementor進(jìn)行更高級的操作
  • Implement:定義接口,里面是基礎(chǔ)的操作
  • ConcreteImplement:實現(xiàn)Implement中的接口

例子

拿鋼鐵俠的反應(yīng)爐舉例吧畴蹭,鋼鐵俠和他胸口的反應(yīng)爐的關(guān)系應(yīng)該如下:

public class IronMan {
    private ArcReactor reactor;
    private double health = 100; //假設(shè)其為100坦仍,降到0就中毒
    
    public void setReactor(ArcReactor reactor) {
        this.reactor = reactor;
    }
    
    public void use() {
        double energy = reactor.getEnergy();
        // do something
        System.out.println("使用鋼鐵俠套裝");
        health = reactor.solveScrap(health);
    }
    
    public double checkPd() {
        String s = "當(dāng)前血液中鈀濃度為"+(100-health)+"%,";
        String result = "";
        if(health < 0) {
            result = "已中毒過深";
        }else if (health == 100) {
            result = "健康";
        }else {
            result = "請盡快處理";
        }
        System.out.println(s+result);
        return health;
    }
    
    public void reset() {
        health = 100;
    }
}

public interface ArcReactor {
    public double getEnergy();
    // 處理廢料
    public double solveScrap(double body);
}

然后Tony創(chuàng)造了兩種:微型方舟反應(yīng)爐叨襟,新元素方舟反應(yīng)爐繁扎。

/**
 * 微型化的方舟反應(yīng)爐
 * @author Will
 */
public class MicroReactor implements ArcReactor {
    private double palladium = 100; //鈀元素
    private double scrap = 0;
    
    @Override
    public double getEnergy() {
        palladium--;
        return 30;
    }

    @Override
    public double solveScrap(double body) {
        // 廢料直接排出
        scrap++;
        body-=11;
        return body;
    }
}


public class NewElementReactor implements ArcReactor {
    private double newElement = 100; //新元素
    @Override
    public double getEnergy() {
        newElement--;
        return 30;
    }

    @Override
    public double solveScrap(double body) {
        // 清潔能源無污染
        return body;
    }
}

使用如下:


public class Main {
    public static void main(String[] args) {
        IronMan tony = new IronMan();
        MicroReactor oldReactor = new MicroReactor();
        tony.setReactor(oldReactor);
        
        tony.use();
        tony.checkPd();
        
        tony.reset();
        System.out.println("\n換個反應(yīng)爐再來\n");
        
        NewElementReactor newReactor = new NewElementReactor();
        tony.setReactor(newReactor);
        tony.use();
        tony.checkPd();
    }
}

結(jié)果如下:

使用鋼鐵俠套裝
當(dāng)前血液中鈀濃度為11.0%,請盡快處理

換個反應(yīng)爐再來

使用鋼鐵俠套裝
當(dāng)前血液中鈀濃度為0.0%糊闽,健康

更換反應(yīng)爐并不影響整個使用過程梳玫,而且,IronMan這個類的子類可以繼續(xù)使用右犹。

總結(jié)

Bridge模式重點在于將容易變更的部分抽象出來提澎,抽象部分的改動不影響整體的其他代碼,而且整體的子類能以相同的方式使用抽象部分念链,讓代碼更加靈活盼忌。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末积糯,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子谦纱,更是在濱河造成了極大的恐慌看成,老刑警劉巖,帶你破解...
    沈念sama閱讀 207,248評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件跨嘉,死亡現(xiàn)場離奇詭異绍昂,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)偿荷,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,681評論 2 381
  • 文/潘曉璐 我一進(jìn)店門窘游,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人跳纳,你說我怎么就攤上這事忍饰。” “怎么了寺庄?”我有些...
    開封第一講書人閱讀 153,443評論 0 344
  • 文/不壞的土叔 我叫張陵艾蓝,是天一觀的道長。 經(jīng)常有香客問我斗塘,道長赢织,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,475評論 1 279
  • 正文 為了忘掉前任馍盟,我火速辦了婚禮于置,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘贞岭。我一直安慰自己八毯,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 64,458評論 5 374
  • 文/花漫 我一把揭開白布瞄桨。 她就那樣靜靜地躺著话速,像睡著了一般。 火紅的嫁衣襯著肌膚如雪芯侥。 梳的紋絲不亂的頭發(fā)上泊交,一...
    開封第一講書人閱讀 49,185評論 1 284
  • 那天,我揣著相機(jī)與錄音柱查,去河邊找鬼廓俭。 笑死,一個胖子當(dāng)著我的面吹牛物赶,可吹牛的內(nèi)容都是我干的白指。 我是一名探鬼主播,決...
    沈念sama閱讀 38,451評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼酵紫,長吁一口氣:“原來是場噩夢啊……” “哼告嘲!你這毒婦竟也來了错维?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,112評論 0 261
  • 序言:老撾萬榮一對情侶失蹤橄唬,失蹤者是張志新(化名)和其女友劉穎赋焕,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體仰楚,經(jīng)...
    沈念sama閱讀 43,609評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡隆判,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,083評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了僧界。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片侨嘀。...
    茶點故事閱讀 38,163評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖捂襟,靈堂內(nèi)的尸體忽然破棺而出咬腕,到底是詐尸還是另有隱情,我是刑警寧澤葬荷,帶...
    沈念sama閱讀 33,803評論 4 323
  • 正文 年R本政府宣布涨共,位于F島的核電站,受9級特大地震影響宠漩,放射性物質(zhì)發(fā)生泄漏举反。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,357評論 3 307
  • 文/蒙蒙 一扒吁、第九天 我趴在偏房一處隱蔽的房頂上張望火鼻。 院中可真熱鬧,春花似錦瘦陈、人聲如沸凝危。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,357評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至懦铺,卻和暖如春捉貌,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背冬念。 一陣腳步聲響...
    開封第一講書人閱讀 31,590評論 1 261
  • 我被黑心中介騙來泰國打工趁窃, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人急前。 一個月前我還...
    沈念sama閱讀 45,636評論 2 355
  • 正文 我出身青樓醒陆,卻偏偏與公主長得像,于是被迫代替她去往敵國和親裆针。 傳聞我的和親對象是個殘疾皇子刨摩,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,925評論 2 344

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

  • 設(shè)計模式匯總 一寺晌、基礎(chǔ)知識 1. 設(shè)計模式概述 定義:設(shè)計模式(Design Pattern)是一套被反復(fù)使用、多...
    MinoyJet閱讀 3,906評論 1 15
  • 設(shè)計模式基本原則 開放-封閉原則(OCP)澡刹,是說軟件實體(類呻征、模塊、函數(shù)等等)應(yīng)該可以拓展罢浇,但是不可修改陆赋。開-閉原...
    西山薄涼閱讀 3,753評論 3 13
  • 文章部分內(nèi)容轉(zhuǎn)載自:http://blog.csdn.net/zhangerqing 一、設(shè)計模式的分類 總體來說...
    j_cong閱讀 2,058評論 0 20
  • 一嚷闭、定義&作用攒岛、分類、使用場景 1.定義 Broadcast在Android系統(tǒng)中應(yīng)用的非常廣泛胞锰,Broadcas...
    silencefun閱讀 703評論 0 1
  • 最近麻麻天天帶我各種玩耍灾锯,麻麻說要用心對待生活中看似平凡的小事,家庭的儀式感很重要胜蛉,今天是兒童節(jié)挠进,哥哥和弟弟來家里...
    張薇薇兒閱讀 264評論 0 0