設(shè)計(jì)模式系列-裝飾者模式

我覺得裝飾者模式是在已有功能的基礎(chǔ)之上,動(dòng)態(tài)地添加更多 功能的一種方式予权,這些新加的代碼裝飾了原有類的 核心職責(zé)或主要行為站刑。

類UML圖

image.png

1、首先我們定義一個(gè)Coffce基類

/**
 * @ explain:這里Coffee相當(dāng)于我們的Component敲街,
 * 是要裝飾的類
 *
 */
public abstract class Coffee {

    /**
     *
     * @return 返回價(jià)格
     */
    public abstract int getPrice();

    /**
     * 返回名字
     * @return
     */
    public abstract String getName();
}

2团搞、接著 我們定義一個(gè)Decorator類繼承 我們的Coffice基類

/**
 * @ explain:Decorator類繼承 我們的Coffice基類
 * @ author:
 * @ email:
 */
public abstract class Decorator extends Coffee{

    protected Coffee mCoffee;

    /**
     * 通過組合的方式把Coffee對(duì)象傳遞進(jìn)來
     * @param coffee
     */
    public Decorator(Coffee coffee){
        mCoffee=coffee;
    }
}

3、接下來我們來看我們的子類是怎樣實(shí)現(xiàn)的

public class MilkDecorator extends Decorator {

    /**
     * 通過組合的方式把Coffee對(duì)象傳遞進(jìn)來
     *
     * @param coffee
     */
    public MilkDecorator(Coffee coffee) {
        super(coffee);
    }

    @Override
    public int getPrice() {
        return mCoffee.getPrice()+10;
    }

    @Override
    public String getName() {
        return "addMilk";
    }
}

4多艇、接下來不難想象加糖逻恐,就奶泡。就摩卡的操作,都是在原來的之上加上配料的價(jià)格

return mCoffee.getPrice()+2;
return mCoffee.getPrice()+15;
return mCoffee.getPrice()+20;

以后你想要計(jì)算加糖峻黍,就牛奶,加奶泡的咖啡的價(jià)格复隆,只需要這樣

mCoffee = new SimpleCoffee();
mCoffee = new SugarDecorator(mCoffee);
mCoffee = new MilkDecorator(mCoffee);
mCoffee = new MilkFoamDecorator(mCoffee);
int price1 = mCoffee.getPrice();
System.out.println("price1="+price1);

以后你想要計(jì)算加糖,就牛奶咖啡的價(jià)格姆涩,只需要這樣

mCoffee = new SimpleCoffee();
mCoffee = new SugarDecorator(mCoffee);
mCoffee = new MilkDecorator(mCoffee);
int price1 = mCoffee.getPrice();
System.out.println("price1="+price1);

裝飾者模式的優(yōu)缺點(diǎn)

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

  • 把類中的裝飾功能從類中搬除挽拂,可以簡(jiǎn)化原來的類
  • 可以把類的 核心職責(zé)和裝飾功能區(qū)分開來,結(jié)構(gòu)清晰 明了并且可以去除相關(guān)類的重復(fù)的裝飾邏輯骨饿。
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末亏栈,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子宏赘,更是在濱河造成了極大的恐慌绒北,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,376評(píng)論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件察署,死亡現(xiàn)場(chǎng)離奇詭異闷游,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)贴汪,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,126評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門储藐,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人嘶是,你說我怎么就攤上這事钙勃。” “怎么了聂喇?”我有些...
    開封第一講書人閱讀 156,966評(píng)論 0 347
  • 文/不壞的土叔 我叫張陵辖源,是天一觀的道長(zhǎng)蔚携。 經(jīng)常有香客問我,道長(zhǎng)克饶,這世上最難降的妖魔是什么酝蜒? 我笑而不...
    開封第一講書人閱讀 56,432評(píng)論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮矾湃,結(jié)果婚禮上亡脑,老公的妹妹穿的比我還像新娘。我一直安慰自己邀跃,他們只是感情好霉咨,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,519評(píng)論 6 385
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著拍屑,像睡著了一般途戒。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上僵驰,一...
    開封第一講書人閱讀 49,792評(píng)論 1 290
  • 那天喷斋,我揣著相機(jī)與錄音,去河邊找鬼蒜茴。 笑死星爪,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的粉私。 我是一名探鬼主播移必,決...
    沈念sama閱讀 38,933評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼毡鉴!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起秒赤,我...
    開封第一講書人閱讀 37,701評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤猪瞬,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后入篮,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體陈瘦,經(jīng)...
    沈念sama閱讀 44,143評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,488評(píng)論 2 327
  • 正文 我和宋清朗相戀三年潮售,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了痊项。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,626評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡酥诽,死狀恐怖鞍泉,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情肮帐,我是刑警寧澤咖驮,帶...
    沈念sama閱讀 34,292評(píng)論 4 329
  • 正文 年R本政府宣布边器,位于F島的核電站,受9級(jí)特大地震影響托修,放射性物質(zhì)發(fā)生泄漏忘巧。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,896評(píng)論 3 313
  • 文/蒙蒙 一睦刃、第九天 我趴在偏房一處隱蔽的房頂上張望砚嘴。 院中可真熱鬧,春花似錦涩拙、人聲如沸际长。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,742評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽也颤。三九已至,卻和暖如春郁轻,著一層夾襖步出監(jiān)牢的瞬間翅娶,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評(píng)論 1 265
  • 我被黑心中介騙來泰國(guó)打工好唯, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留竭沫,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,324評(píng)論 2 360
  • 正文 我出身青樓骑篙,卻偏偏與公主長(zhǎng)得像蜕提,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子靶端,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,494評(píng)論 2 348

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

  • 所謂的設(shè)計(jì)模式谎势,其實(shí)是對(duì)面向?qū)ο缶幊趟枷胫械囊粋€(gè)轉(zhuǎn)變,是在繁重需求任務(wù)中做到可擴(kuò)展杨名,高度靈活脏榆,并且適應(yīng)業(yè)務(wù)開發(fā)而產(chǎn)...
    Abson在簡(jiǎn)書閱讀 724評(píng)論 0 2
  • 意圖 動(dòng)態(tài)地給一個(gè)對(duì)象添加一些額外的職責(zé)。就增加功能來說台谍, Decorator模式相比生成子類更為靈活须喂。該模式以對(duì)...
    暮染1閱讀 181評(píng)論 0 0
  • 設(shè)計(jì)原則: 少用繼承,多用組合 類應(yīng)該對(duì)擴(kuò)展開放趁蕊,對(duì)修改關(guān)閉 目錄 本文的結(jié)構(gòu)如下: 什么是裝飾者模式 為什么要用...
    w1992wishes閱讀 1,152評(píng)論 0 7
  • 四十一盞小紅燈 點(diǎn)燃冰心的桔燈 似乎也點(diǎn)燃了夜的清冷 月的柔情 點(diǎn)燃了霓虹燈下的浪漫 以及 踏進(jìn)家門的腳步 今天 ...
    高滈閱讀 309評(píng)論 0 2
  • 春天是花開的季節(jié) 這時(shí)候人們到外面去觀賞美麗的花朵坞生! 花朵綻放它的美麗! 所有用自己的手機(jī) 給它拍照掷伙! 讓它最美麗...
    李_昀倩閱讀 164評(píng)論 0 1