裝飾者模式可以動態(tài)地給一個對象添加一些額外的職責(zé)。就增加功能來說,Decorator模式相比生成子類更為靈活。
該模式的適用環(huán)境為:
(1)在不影響其他對象的情況下,以動態(tài)、透明的方式給單個對象添加職責(zé)。
(2)處理那些可以撤消的職責(zé)。
(3)當(dāng)不能采用生成子類的方法進(jìn)行擴(kuò)充時。一種情況是,可能有大量獨(dú)立的擴(kuò)展,為支持每一種組合將產(chǎn)生大量的子類,使得子類數(shù)目呈爆炸性增長。另一種情況可能是因?yàn)轭惗x被隱藏,或類定義不能用于生成子類。
實(shí)現(xiàn)該模式的關(guān)鍵步驟:
(1)Component(被裝飾對象基類):定義對象的接口,可以給這些對象動態(tài)增加職責(zé);
(2)ConcreteComponent(具體被裝飾對象):定義具體的對象,Decorator可以給它增加額外的職責(zé);
(3)Decorator(裝飾者抽象類):維護(hù)指向Component實(shí)例的引用,定義與Component一致的接口(也就是要繼承或?qū)崿F(xiàn)被裝飾對象基類);
(4)ConcreteDecorator(具體裝飾者):具體的裝飾對象,給內(nèi)部持有的具體被裝飾對象增加具體的職責(zé);
這樣講大家可能有些不好理解,那我們還是老規(guī)矩:
入冬以后天氣越來越冷了,下班之后,做為資深吃貨,約上二三好友痛快的來場火鍋盛宴再爽不過了。說到火鍋,不得不提在成都吃過的大龍燚火鍋,各種鍋底,配菜應(yīng)有盡有,但我最喜歡的還是大龍燚火鍋原味鍋底、麻辣牛肉、大刀毛肚、天味香腸、砣砣牛肉、麻辣排骨等,想想都流口水啊。