簡易理解設(shè)計模式之:橋接模式——穿衣服經(jīng)典案例2

介紹:

橋接模式屬于結(jié)構(gòu)型模式苗桂。它的定義為:將抽象部分與實現(xiàn)部分分離,使它們都可以獨立的變化夺艰。

類圖:

橋接模式UML類圖.png

Abstraction(抽象化角色):抽象部分黄痪,保持對實現(xiàn)部分對象的引用,抽象部分中的方法需要調(diào)用實現(xiàn)部分的對象來實現(xiàn)见秽。
RefinedAbstraction(具體抽象化角色):優(yōu)化后的抽象部分愉烙,一般是對抽象部分的方法進行完善和擴展
Implementor(實現(xiàn)化角色):實現(xiàn)部分,提供基本操作
ConcreteImplementor(具體實現(xiàn)化角色):實現(xiàn)部分的具體實現(xiàn)

用法:

? 一個類存在兩個獨立變化的維度解取,且這兩個維度都需要進行擴展
? 不希望使用繼承或因為多層次繼承導(dǎo)致系統(tǒng)類的個數(shù)急劇增加時步责,可以考慮使用此模式
? 任何多維度變化類之間的耦合都可以使用橋接模式來實現(xiàn)解耦

個人理解:
橋接模式的必要條件是存在兩個維度的獨立變化,將其中一個維度劃分成此模式的“抽象角色”禀苦,另外一個維度劃分成“實現(xiàn)角色”蔓肯。

例子:

眾所周知,人會根據(jù)不同的場合穿著不同的衣服振乏。就以男人為例蔗包,上班時會著裝正式(領(lǐng)帶、襯衫慧邮、外套调限、西褲邻储、皮鞋、手表等)旧噪,睡覺時會穿舒適(睡衣吨娜、睡褲等),運動時會穿運動服(T恤衫淘钟、運動褲宦赠、運動鞋等)。在這例子中米母,男人就是抽象化角色勾扭,各種服飾就是實現(xiàn)化角色

需求:輸出男人在以上三種場合的著裝要求

1铁瞒、實現(xiàn)化角色
public abstract class Finery {
    public abstract void dress();
}

各種服飾子類:

public class Jacket extends Finery {
    @Override
    public void dress() {
        System.out.println("外套");
    }
}
public class Sleepcoat extends Finery {
    @Override
    public void dress() {
        System.out.println("睡衣");
    }
}
public class TShirt extends Finery {
    @Override
    public void dress() {
        System.out.println("T恤衫");
    }
}

2妙色、抽象化角色
public class Man {
    private Finery finery;

    public Man(Finery finery) {
        this.finery = finery;
    }

    public void dress() {
        if (finery != null) {
            finery.dress();
        }
    }
}

抽象化角色保持對實現(xiàn)部分對象的引用。因此持有了Finery對象的引用慧耍,在這里將Abstraction(抽象化角色)和RefinedAbstraction(具體抽象化角色)合二為一身辨。

3、測試與實現(xiàn)
public class Client {
    public static void main(String[] args) {
        //上班的男人
        Man man = new Man(new Jacket());
        man.dress();

        //睡覺的男人
        man = new Man(new Sleepcoat());
        man.dress();

        //運動的男人
        man = new Man(new TShirt());
        man.dress();

    }
}

外套
睡衣
T恤衫

通過此例子芍碧,分離了兩個維度的變化:男人服飾煌珊。基本功能就完成了泌豆《ㄢ郑可以看得出這個模式非常簡單。

總結(jié):

此模式告訴我們踪危,面對多維度的變化的問題蔬浙,我們盡量使用合成/聚合,盡量不要使用繼承贞远。

另外畴博,在裝飾模式——穿衣服經(jīng)典案例中提到第二點方案,原來這就是橋接模式啊兴革。當(dāng)時提到:用繼承的方法會令到子類的數(shù)量暴增并且可能存在大量重復(fù)代碼绎晃,造成代碼臃腫,最終就是難以維護。所以此模式不適合在某一個維度中獨立變化的子類非常多的情況下使用袁余。

感謝您的閱讀~

轉(zhuǎn)載請注明出處喔:http://www.reibang.com/p/07109eeb319c

推薦閱讀

基礎(chǔ)篇:
設(shè)計模式前篇之——UML類圖必會知識點
設(shè)計模式前篇之——一起過一下面向?qū)ο蟮母拍?/a>
創(chuàng)建型模式:
簡易理解設(shè)計模式之:簡單工廠模式——來試試接入支付功能
簡易理解設(shè)計模式之:工廠方法模式——數(shù)據(jù)存儲例子
簡易理解設(shè)計模式之:抽象工廠模式——更換數(shù)據(jù)庫例子
簡易理解設(shè)計模式之:建造者模式——學(xué)習(xí)使用“鏈?zhǔn)秸{(diào)用”
簡易理解設(shè)計模式之:原型模式——深擎勘、淺拷貝的概念
簡易理解設(shè)計模式之:單例模式——單例模式的幾種常用寫法
結(jié)構(gòu)型模式:
簡易理解設(shè)計模式之:適配器模式——Android列表視圖控件設(shè)計方式

簡易理解設(shè)計模式之:橋接模式——穿衣服經(jīng)典案例2
簡易理解設(shè)計模式之:組合模式——實現(xiàn)View中的樹狀結(jié)構(gòu)
簡易理解設(shè)計模式之:裝飾模式——穿衣服經(jīng)典案例
簡易理解設(shè)計模式之:外觀模式——第三方SDK的幫助類
簡易理解設(shè)計模式之:享元模式——五子棋游戲例子
簡易理解設(shè)計模式之:代理模式——iOS視圖控件設(shè)計方式
行為型模式:
簡易理解設(shè)計模式之:策略模式——優(yōu)化一下支付功能
簡易理解設(shè)計模式之:模板方法模式——Android中的BaseActivity基類
簡易理解設(shè)計模式之:觀察者模式——監(jiān)聽與回調(diào)
簡易理解設(shè)計模式之:狀態(tài)模式——優(yōu)化登錄操作
簡易理解設(shè)計模式之:備忘錄模式——Word文檔的工作原理
簡易理解設(shè)計模式之:迭代器模式——遍歷對象的好幫手
簡易理解設(shè)計模式之:命令模式——實現(xiàn)命令的參數(shù)化配置
簡易理解設(shè)計模式之:責(zé)任鏈模式——OA中請假流程示例
簡易理解設(shè)計模式之:中介者模式——多人聊天室例子
簡易理解設(shè)計模式之:解釋器模式——語言和文法
簡易理解設(shè)計模式之:訪問者模式——員工考核例子

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末棚饵,一起剝皮案震驚了整個濱河市噪漾,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌题翰,老刑警劉巖豹障,帶你破解...
    沈念sama閱讀 216,744評論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件血公,死亡現(xiàn)場離奇詭異累魔,居然都是意外死亡,警方通過查閱死者的電腦和手機梯澜,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,505評論 3 392
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來午磁,“玉大人,你說我怎么就攤上這事】蛄” “怎么了?”我有些...
    開封第一講書人閱讀 163,105評論 0 353
  • 文/不壞的土叔 我叫張陵王暗,是天一觀的道長。 經(jīng)常有香客問我头滔,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,242評論 1 292
  • 正文 為了忘掉前任潭千,我火速辦了婚禮,結(jié)果婚禮上屉来,老公的妹妹穿的比我還像新娘亿驾。我一直安慰自己,他們只是感情好喂江,可當(dāng)我...
    茶點故事閱讀 67,269評論 6 389
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著尝哆,像睡著了一般秋泄。 火紅的嫁衣襯著肌膚如雪恒序。 梳的紋絲不亂的頭發(fā)上歧胁,一...
    開封第一講書人閱讀 51,215評論 1 299
  • 那天喊巍,我揣著相機與錄音玄糟,去河邊找鬼袄秩。 笑死,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的背稼。 我是一名探鬼主播俯树,決...
    沈念sama閱讀 40,096評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼舵盈!你這毒婦竟也來了秽晚?” 一聲冷哼從身側(cè)響起赴蝇,我...
    開封第一講書人閱讀 38,939評論 0 274
  • 序言:老撾萬榮一對情侶失蹤坝初,失蹤者是張志新(化名)和其女友劉穎鳄袍,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,354評論 1 311
  • 正文 獨居荒郊野嶺守林人離奇死亡性湿,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,573評論 2 333
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了焙压。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,745評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖涯曲,靈堂內(nèi)的尸體忽然破棺而出野哭,到底是詐尸還是另有隱情,我是刑警寧澤幻件,帶...
    沈念sama閱讀 35,448評論 5 344
  • 正文 年R本政府宣布拨黔,位于F島的核電站,受9級特大地震影響绰沥,放射性物質(zhì)發(fā)生泄漏篱蝇。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,048評論 3 327
  • 文/蒙蒙 一徽曲、第九天 我趴在偏房一處隱蔽的房頂上張望零截。 院中可真熱鬧,春花似錦秃臣、人聲如沸涧衙。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,683評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽弧哎。三九已至,卻和暖如春稚虎,著一層夾襖步出監(jiān)牢的瞬間撤嫩,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,838評論 1 269
  • 我被黑心中介騙來泰國打工祥绞, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留非洲,地道東北人。 一個月前我還...
    沈念sama閱讀 47,776評論 2 369
  • 正文 我出身青樓蜕径,卻偏偏與公主長得像两踏,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子兜喻,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,652評論 2 354