為物件動態新增功能。
裝飾者(decorator)和具體元件(concretecomponent)都繼承自元件(component),具體元件的方法實現不需要依賴於其它物件,而裝飾者組合了乙個元件,這樣它可以裝飾其它裝飾者或者具體元件。所謂裝飾,就是把這個裝飾者套在被裝飾者之上,從而動態擴充套件被裝飾者的功能。裝飾者的方法有一部分是自己的,這屬於它的功能,然後呼叫被裝飾者的方法實現,從而也保留了被裝飾者的功能。可以看到,具體元件應當是裝飾層次的最低層,因為只有具體元件的方法實現不需要依賴於其它物件。
設計不同種類的飲料,飲料可以新增配料,比如可以新增牛奶,並且支援動態新增新配料。每增加一種配料,該飲料的**就會增加,要求計算一種飲料的**。
下圖表示在 darkroast 飲料上新增新新增 mocha 配料,之後又新增了 whip 配料。darkroast 被 mocha 包裹,mocha 又被 whip 包裹。它們都繼承自相同父類,都有 cost() 方法,外層類的 cost() 方法呼叫了內層類的 cost() 方法。
}
3.0
注:類應該對擴充套件開放,對修改關閉:也就是新增新功能時不需要修改**。飲料可以動態新增新的配料,而不需要去修改飲料的**。1. beverage:飲料
2. condiment:調味品;佐料
不可能把所有的類設計成都滿足這一原則,應當把該原則應用於最有可能發生改變的地方。
常見設計模式之 裝飾模式
裝飾模式 顧名思義就是跟他加層層外套,或者說是給乙個實體增加更多的形容詞 請看demo讓你一目了然,呵呵.你懂滴 package decorator description 裝飾模式 author potter date 2012 9 10 下午05 35 07 version v1.0 param...
設計模式 裝飾模式
裝飾模式,動態地給乙個物件新增一些額外的職責,就增加功能來說,裝飾模式比生成子類更為靈活。m 超級瑪麗 普通繼承模式實現 a 發鏢 能組合出七種功能 m1 a m4 a b b 變身 m2 b m5 a c c 無敵 m3 c m6 b c m7 a b m m1 a b 組合方法 new m2 m...
設計模式 裝飾模式
剛看了看設計模式,真是費了好多的腦細胞。想著想著就到了食堂。o o哈!正是長身體的時候 大神勿噴 一定要多吃點。於是我打了乙份公尺飯,然後又端著盛公尺飯的盤子買了乙份菜 看著還不是很夠,就又端著這個盤子買了一條最愛吃的魚。裝飾模式!五一要來了。回家轉轉,沒有小外甥的玩具怎麼行。於是我去超市,推著購物...