參考書——《HeadFirst設計模式》
* 裝飾者和被裝飾對象有相同的超類型。
* 你可以用一個或多個裝飾者包裝一個對象。* 既然裝飾者和被裝飾(亦即被包裝的組件)對象有相同的超類型,所以在任何需要原始對象(被包裝的)的場合, 可以用裝飾過的對象代替它。
* 裝飾者可以在所委託被裝飾者的行爲之前與/或之後,加上自己的行爲,以達到特定的目的。* 對象可以在任何時候被裝飾,所以可以在運行時動態地、不限量地用你喜歡的裝飾者來裝飾對象。
裝飾者模式動態地將責任附加到對象上。若要擴展功能,裝飾者提供了比繼承更有彈性的替代方案。
說明:
1.利用繼承達到“類型匹配”,而不是利用繼承獲得“行爲”。如果依賴繼承,那麼類的行爲只能在編譯時靜態決定。
2.將裝飾者與組件組合時,就是在加入新的行爲。所得到的新行爲,並不是繼承自超類,而是由組合對象得來的。行爲來自裝飾者和基礎組件,或與其他裝飾者之間的組合關係。且用到了委託的做法。
3.java 的I/O也用到了此模式。