該模式可以避免濫用繼承,在使用對象組合的方式,就能做到在運行時裝飾類,此后便能在不修改任何底層代碼的情況下給對象賦予新的職責。
設計原則
類應該對擴展開放,對修改關閉
- 好處:在不修改現(xiàn)有代碼的情況下,就可搭配新的行為,這樣的設計具有彈性,可以應對改變,可以接受新的功能來應對改變的需求
- 遵循開放-關閉原則,通常會引入新的抽象層次,增加代碼的復雜度,需要我們把注意力集中在設計中最有可能改變的地方,然后應用開放-關閉原則。
- 如果每個地方都采用開放-關閉原則也是沒有必要的,還會導致代碼變得復雜且難以理解
要求
- 裝飾者和被裝飾對象有相同的父類型
- 可以用一個或者多個裝飾者包裝一個對象
- 在任何需要原始對象的場合,可以用裝飾過的對象代替他
- 裝飾者可以在所委托被裝飾者的行為之前或者之后,加上自己的行為,以達到特定目的
- 對象可以在任何時候被裝飾,可以在運行時動態(tài)的不限量的用裝飾者來裝飾對象
定義
裝飾者模式動態(tài)的將責任附加到對象上,若要擴展功能,裝飾者提供了比繼承更有彈性的替代方案。
Java中裝飾者模式使用突出的部分就是在IO部分。