Java 裝飾設計模式
裝飾設計模式
將原類進行“裝飾” 將原類的功能進行增強。
對類進行功能增強 也可以使用繼承實現。
繼承與裝飾的區別。
例 一個寫入流對象。 Writer
下有兩個子類,一個用於操作文本,一個用於操作媒體。
|---TextWriter |---MediaWriter
若需要對操作效率進行提高,加入緩衝技術。
通過繼承技術進行功能擴展。需要對每個子類進行繼承擴展。
|---TextWriter
|---MediaWriter
|---BufferedTextWriter
|--BufferedMediaWriter
這樣就通過繼承完成了功能擴展。
但是,如果又增加一個操作圖形的類 GWriter 又會產生與上面相同體系的子類。
當不斷功能擴展,就會導致整個繼承體系越來越臃腫。
因此,可以使用裝飾設計模式
每個子類的功能擴充都是一樣的,都是加入緩衝技術,高效操作。
所以就將緩衝進行封裝,當哪個對象(Text、Media、G)需要緩衝,就將緩衝和具體的對象相結合。
class Buffer extends Writer
{
Buffer(Writer w)
{
}
}---------Writer w 多態,可以接受Text、Media、Graph 等Writer下的子類
裝飾後的體系爲
Writer
|---Text
用於操作文本
|---Media
用於操作媒體
|--Graph
用於操作圖形
|---Buffer
用於提高效率
裝飾比繼承更靈活
特點:裝飾類和被裝飾類必須同屬於一個接口或父類。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.