裝飾模式

職責(zé)

  • 動態(tài)地為一個對象增加新的功能
  • 裝飾模式是一種用于代替繼承的技術(shù)妈嘹,無須通過繼承增加子類就能擴展對象的新功能初嘹,使用對象的關(guān)聯(lián)關(guān)系代替繼承關(guān)系刨晴,更加靈活霹琼,同時避免類型體系的快速膨脹

UML

image.png

實現(xiàn)細節(jié)

  • Component抽象構(gòu)件角色
    真實對象和裝飾對象有相同的接口。這樣丰嘉,客戶端對象就能夠以與真實對象相同的方式同裝飾對象交互
  • ConcreteComponent具體構(gòu)件角色(真實對象)
    io 流中的FileInputStream夯到、FileOutputStream
  • Decorator裝飾角色
    持有一個抽象構(gòu)件的應(yīng)用。裝飾對象接受所有客戶端的請求饮亏,并把這些請求轉(zhuǎn)發(fā)給真實的對象耍贾,這樣,就能在真實對象調(diào)用前后增加新的功能
  • ConcretDecorator具體裝飾角色
    負責(zé)給構(gòu)件對象增加新的責(zé)任

代碼實現(xiàn)

package com.amberweather.decorator;
/**
 * Component抽象構(gòu)件角色
 * @author HT
 *
 */
public interface ICar {
    void move();
}
//ConcreteComponent具體構(gòu)件角色(真實角色)
class Car implements ICar{
    @Override
    public void move() {
        System.out.println("陸地上跑");
    }
}
//Decorator裝飾角色
class SuperCar implements ICar{
    private ICar car;
    
    public SuperCar(ICar car) {
        super();
        this.car = car;
    }

    @Override
    public void move() {
        car.move();
    }
    
}
//ConcretDecorator具體裝飾角色
class FlyCar extends SuperCar{

    public FlyCar(ICar car) {
        super(car);
    }
    public void fly(){
        System.out.println("在天上飛");
    }
    @Override
    public void move() {
        fly();
        super.move();
    }
}
//ConcretDecorator具體裝飾角色
class WaterCar extends SuperCar{

    public WaterCar(ICar car) {
        super(car);
    }
    public void swim(){
        System.out.println("在水上跑");
    }
    @Override
    public void move() {
        swim();
        super.move();
    }
}
package com.amberweather.decorator;

public class Client {

    public static void main(String[] args) {
        Car car = new Car();
        car.move();
        
        System.out.println("----增加新的飛行功能----");
        
        FlyCar flyCar = new FlyCar(car);
        flyCar.move();
        
        System.out.println("----增加新的水上游功能----");
        
        WaterCar waterCar = new WaterCar(flyCar);
        waterCar.move();
    }

}
image.png

裝飾器的實例

Reader r = new BufferedReader(new InputStream(new FileInputStream(new File("D:/a.txt"))));

總結(jié)

裝飾模式降低系統(tǒng)的耦合度路幸,可以動態(tài)的增加或刪除對象的職責(zé)荐开,并使得需要裝飾的具體構(gòu)建類和具體裝飾類可以獨立變化,以便增加新的具體構(gòu)建類和具體裝飾類简肴。

裝飾模式和橋接模式的區(qū)別

兩個模式都是為了解決過多子類對象的問題晃听,但他們的誘因不一樣。橋接模式是對自身現(xiàn)有的機制沿著多個維度變化砰识,是既有部分不穩(wěn)定能扒。裝飾模式是為了增加新的功能。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末辫狼,一起剝皮案震驚了整個濱河市初斑,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌膨处,老刑警劉巖见秤,帶你破解...
    沈念sama閱讀 206,214評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件砂竖,死亡現(xiàn)場離奇詭異,居然都是意外死亡鹃答,警方通過查閱死者的電腦和手機乎澄,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,307評論 2 382
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來挣跋,“玉大人三圆,你說我怎么就攤上這事”芘兀” “怎么了舟肉?”我有些...
    開封第一講書人閱讀 152,543評論 0 341
  • 文/不壞的土叔 我叫張陵,是天一觀的道長查库。 經(jīng)常有香客問我路媚,道長,這世上最難降的妖魔是什么樊销? 我笑而不...
    開封第一講書人閱讀 55,221評論 1 279
  • 正文 為了忘掉前任整慎,我火速辦了婚禮,結(jié)果婚禮上围苫,老公的妹妹穿的比我還像新娘裤园。我一直安慰自己,他們只是感情好剂府,可當(dāng)我...
    茶點故事閱讀 64,224評論 5 371
  • 文/花漫 我一把揭開白布拧揽。 她就那樣靜靜地躺著,像睡著了一般腺占。 火紅的嫁衣襯著肌膚如雪淤袜。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,007評論 1 284
  • 那天衰伯,我揣著相機與錄音铡羡,去河邊找鬼。 笑死意鲸,一個胖子當(dāng)著我的面吹牛烦周,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播临扮,決...
    沈念sama閱讀 38,313評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼论矾,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了杆勇?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,956評論 0 259
  • 序言:老撾萬榮一對情侶失蹤饱亿,失蹤者是張志新(化名)和其女友劉穎蚜退,沒想到半個月后闰靴,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,441評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡钻注,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,925評論 2 323
  • 正文 我和宋清朗相戀三年蚂且,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片幅恋。...
    茶點故事閱讀 38,018評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡杏死,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出捆交,到底是詐尸還是另有隱情淑翼,我是刑警寧澤,帶...
    沈念sama閱讀 33,685評論 4 322
  • 正文 年R本政府宣布品追,位于F島的核電站玄括,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏肉瓦。R本人自食惡果不足惜遭京,卻給世界環(huán)境...
    茶點故事閱讀 39,234評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望泞莉。 院中可真熱鬧哪雕,春花似錦、人聲如沸鲫趁。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,240評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽饮寞。三九已至孝扛,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間幽崩,已是汗流浹背苦始。 一陣腳步聲響...
    開封第一講書人閱讀 31,464評論 1 261
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留慌申,地道東北人陌选。 一個月前我還...
    沈念sama閱讀 45,467評論 2 352
  • 正文 我出身青樓,卻偏偏與公主長得像蹄溉,于是被迫代替她去往敵國和親咨油。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,762評論 2 345

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

  • (轉(zhuǎn)載)原文地址 在閻宏博士的《JAVA與模式》一書中開頭是這樣描述裝飾(Decorator)模式的: 裝飾模式又...
    zjk_00閱讀 629評論 0 2
  • 一柒爵、模式動機 一般有兩種方式可以實現(xiàn)給一個類或?qū)ο笤黾有袨椋?繼承機制役电,使用繼承機制是給現(xiàn)有類添加功能的一種有效途...
    端木軒閱讀 512評論 0 0
  • 1 概述 在一個項目中,你會有非常多的因素考慮不到棉胀,特別是業(yè)務(wù)的變更法瑟,不時的冒出一個需求是很正常的情況冀膝。有三個繼承...
    今晚打肉山閱讀 294評論 0 0
  • 一窝剖、職責(zé) 動態(tài)的為一個對象增加新的功能 裝飾模式是一種用于代替繼承的技術(shù),無須通過繼承增加子類就能擴展對象的新功能...
    yjaal閱讀 158評論 0 0
  • 我的博客:https://blog.thuol.com 說明 參考網(wǎng)絡(luò)上其他人文章酥夭。將他人技術(shù)文章親自測試并總結(jié)補...
    00天火00閱讀 613評論 0 1