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