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    用於提高效率

裝飾比繼承更靈活

特點:裝飾類和被裝飾類必須同屬於一個接口或父類。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章