(三)裝飾者模式

2021-09-26 21:56:34 字數 808 閱讀 9297

裝飾器模式是一種屬於結構型的設計模式,它通過一層一層地包裝類方式來為類增加新的方法,本質是利用組合,同時也利用了繼承。與單純的繼承相比,它更加靈活,因為裝飾類之間可以動態地自由組合來新增功能。

給物件新增方法的方式有多種,通常,當說到給物件新增方法時,最直接的就是直接在該物件的類中增加新的方法,但這樣在最上方增加方法,不僅更改了原來的**結構,還會讓**看起來十分臃腫;然後,我們就能想到繼承,直接新增加乙個類來繼承,在子類中新增方法,然而這樣做並不夠靈活,而且在不斷增加方法時,還會出現多重繼承的現象,導致**結構很亂;那麼,這時候就需要另一種方式了,這種方式就是組合的方式。

/** * 被裝飾的人

*/class person //定義乙個component物件介面,顯示出裝扮後的裝飾

virtual void show() };

/** * 服飾類

*/class finery: public person

void show()

}};/**

* t恤類

*/class tshirts: public finery

結果

裝扮風格: 

破鞋子

垮褲 大體恤

裝扮的小明

三 裝飾者模式

定義 動態地將責任附加到物件上。若要擴充套件功能,裝飾者提供了比繼承更有彈性的替代方案。使用裝飾者模式,建立乙個新的裝飾者完成實現將字串的小寫變成大寫。public class lowercaseinputstream extends filterinputstream public intread...

設計模式(三) 裝飾者模式

裝飾者結構圖 1 component 被裝飾者的抽象類或介面,定義了新增職責的方法 2 concretecomponent 被裝飾者的具體實現類,如果只有乙個被裝飾者,concretecomponent和component可以合二為一 3 decorator 裝飾者父類,繼承component被裝飾...

設計模式(三)裝飾者模式

星巴克咖啡館想要乙份選單系統,要求能夠計算不同種類咖啡加上不同調料 牛奶 豆漿 摩卡 奶泡。的 tom做了如下實現 每個咖啡都要繼承這個飲料類,然後對是否有各種調料進行配置,然後實現cost 方法。這樣基本解決了這個問題,但是如果現在又增加了幾種飲料,是不是需要更改現在的 呢?如何才能不對以前 做修...