裝飾者模式(Decorator Pattern)
動態地將責任附加到對象上。若要擴展功能,裝飾者提供了比繼承更有彈性的替代方案。
簡單點說,裝飾者可以裝飾(也就是在原來功能的基礎上再擴展其功能)被裝飾者。一個被裝飾者可以被多個裝飾者裝飾,或者被相同的裝飾者裝飾多次,是不是很靈活啊。而這就要求裝飾者和被裝飾者要有相同的父類型。
一般的裝飾類我們都會這樣設計,具體的裝飾者會持有一個被裝飾者對象,這樣我們一就知道了被裝飾對象的行爲,也就可以去裝飾這些行爲了。而且通常在裝飾者的構造器中來獲取並保存這個被裝飾者對象。
Notes:
- 裝飾者與被裝飾者具有相同的超類型
- 可以用多個裝飾者去裝飾一個對象
- 可以用裝飾過的對象代替他自己
- 裝飾者可以在被裝飾者的行爲之前/之後,加上自己的行爲
- 繼承是爲了達到“類型匹配”,而不是爲了繼承行爲
- 把被裝飾者組合進來,也得到了其行爲