裝飾設計模式:
當對類的功能進行增強時,可稱之為對該類的裝飾。
同時它的出現具備靈活性
class person
}class newperson
void newchi()
}裝飾和繼承:
裝飾設計模式是一種解決某一類問題的思想。該類問題的有效解決方案。解決給類提供增強型功能的問題。
繼承:是物件導向的特徵之一。
例子:(api中沒有真實存在的類)
writer
|--textwriter
|--mediawriter
該體系的出現已經可以完成對文字資料和**資料的寫操作。
但是發現,效率較低,為了提高效率,就加入了緩衝技術。
文字寫入緩衝
**寫入緩衝
按照物件導向的思想,為了提高擴充套件,可以通過繼承的方式來完成。
writer
|--textwriter
|--bufferedtextwriter
|--mediawriter
|--bufferedmediawriter
這樣就完成了文字和**資料寫操作,效率提高。
當如果該體系加入乙個子類basewriter,而且該子類也需要效率提高,
writer
|--textwriter
|--bufferedtextwriter
|--mediawriter
|--bufferedmediawriter
|--basewriter
|--bufferedbasewriter
如果體系擴充套件,都需要定義乙個該子類具備高效緩衝功能的子類。
這樣體系擴充套件很麻煩。
所以我們發現,這些子類使用的緩衝技術都是一樣的,緩衝區其實就是定義了臨時儲存容器將資料進行臨時緩衝,至於具體的寫操作,還是writer的子類物件完成的,比如textwriter等
既然這樣,可以將緩衝技術單獨封裝成乙個物件。要對那個具體的物件進行緩衝技術的使用,只要將物件傳遞給緩衝區物件即可。
對緩衝區物件進行單獨描述
class bufferedwriter extends writer
}當緩衝技術單獨封裝成了物件後,它具備的還是寫功能,只不過可以讓其他寫功能進行高效,所以它還是writer類中的一員
所以這時體系變成了這樣
writer
|--textwriter
|--mediawriter
|--bufferedwriter
和原來的體系
writer
|--textwriter
|--bufferedtextwriter
|--mediawriter
|--bufferedmediawriter
|--basewriter
|--bufferedbasewriter
裝飾設計模式的出現可以對一組類進行功能的增強。而且裝飾類本身也是該體系中的乙個子類。
**體現:
通常情況下,
裝飾類一般不單獨存在。
都是通過建構函式接收被裝飾的物件
基於被裝飾的物件的功能,並對外提供增強的功能。
bufferedwriter//這時乙個提供增強功能的類,就把這種優化方式,定義成一種最終解決問題的方案,這種設計模式就是裝飾設計模式
裝飾設計模式和繼承的區別:
繼承會讓體系變得臃腫
裝飾相對來說更為靈活。
在io中裝飾設計模式用的很多。
比如bufferedwriter
bufferedreader
設計模式 裝飾模式
裝飾模式,動態地給乙個物件新增一些額外的職責,就增加功能來說,裝飾模式比生成子類更為靈活。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哈!正是長身體的時候 大神勿噴 一定要多吃點。於是我打了乙份公尺飯,然後又端著盛公尺飯的盤子買了乙份菜 看著還不是很夠,就又端著這個盤子買了一條最愛吃的魚。裝飾模式!五一要來了。回家轉轉,沒有小外甥的玩具怎麼行。於是我去超市,推著購物...
設計模式 裝飾模式
複習設計模式 裝飾模式 裝飾模式 在不修改已經存在的類的情況下,動態的新增新的功能,實現即插即用,開放關閉原則 public inte ce man public class batman implements man override public void killmonster public ...