裝飾者模式可以動(dòng)態(tài)地給一個(gè)對(duì)象添加一些額外的職責(zé)。就增加功能來(lái)說(shuō),Decorator模式相比生成子類更為靈活。
該模式的適用環(huán)境為:
(1)在不影響其他對(duì)象的情況下,以動(dòng)態(tài)、透明的方式給單個(gè)對(duì)象添加職責(zé)。
(2)處理那些可以撤消的職責(zé)。
(3)當(dāng)不能采用生成子類的方法進(jìn)行擴(kuò)充時(shí)。一種情況是,可能有大量獨(dú)立的擴(kuò)展,為支持每一種組合將產(chǎn)生大量的子類,使得子類數(shù)目呈爆炸性增長(zhǎng)。另一種情況可能是因?yàn)轭惗x被隱藏,或類定義不能用于生成子類。
實(shí)現(xiàn)該模式的關(guān)鍵步驟:
(1)Component(被裝飾對(duì)象基類):定義對(duì)象的接口,可以給這些對(duì)象動(dòng)態(tài)增加職責(zé);
(2)ConcreteComponent(具體被裝飾對(duì)象):定義具體的對(duì)象,Decorator可以給它增加額外的職責(zé);
(3)Decorator(裝飾者抽象類):維護(hù)指向Component實(shí)例的引用,定義與Component一致的接口(也就是要繼承或?qū)崿F(xiàn)被裝飾對(duì)象基類);
(4)ConcreteDecorator(具體裝飾者):具體的裝飾對(duì)象,給內(nèi)部持有的具體被裝飾對(duì)象增加具體的職責(zé);
這樣講大家可能有些不好理解,那我們還是老規(guī)矩:
入冬以后天氣越來(lái)越冷了,下班之后,做為資深吃貨,約上二三好友痛快的來(lái)場(chǎng)火鍋盛宴再爽不過(guò)了。說(shuō)到火鍋,不得不提在成都吃過(guò)的大龍燚火鍋,各種鍋底,配菜應(yīng)有盡有,但我最喜歡的還是大龍燚火鍋原味鍋底、麻辣牛肉、大刀毛肚、天味香腸、砣砣牛肉、麻辣排骨等,想想都流口水啊。
延伸閱讀
- ssh框架 2016-09-30
- 阿里移動(dòng)安全 [無(wú)線安全]玩轉(zhuǎn)無(wú)線電——不安全的藍(lán)牙鎖 2017-07-26
- 消息隊(duì)列NetMQ 原理分析4-Socket、Session、Option和Pipe 2024-03-26
- Selective Search for Object Recognition 論文筆記【圖片目標(biāo)分割】 2017-07-26
- 詞向量-LRWE模型-更好地識(shí)別反義詞同義詞 2017-07-26
- 從棧不平衡問(wèn)題 理解 calling convention 2017-07-26
- php imagemagick 處理 圖片剪切、壓縮、合并、插入文本、背景色透明 2017-07-26
- Swift實(shí)現(xiàn)JSON轉(zhuǎn)Model - HandyJSON使用講解 2017-07-26
- 阿里移動(dòng)安全 Android端惡意鎖屏勒索應(yīng)用分析 2017-07-26
- 集合結(jié)合數(shù)據(jù)結(jié)構(gòu)來(lái)看看(二) 2017-07-26