類圖
- 所有原始類與裝飾者類都必須實現(xiàn)共同基類Beverage
- 所有裝飾者類都持有另外一個屬于基類類型的對象引用(這個飲用可以是原始類碗暗,也可以是裝飾者類)
- 如果使用繼承實現(xiàn),每一種組合都必須編寫一個對應(yīng)的類梢夯,最后類的數(shù)量會變得無限大言疗。因為繼承實現(xiàn),類的行為在編譯期間就已經(jīng)確定颂砸,組合的方式使得各種行為可以在“運行時”動態(tài)隨意組合以實現(xiàn)層出不窮的新效果噪奄。
一些限制
- 會出現(xiàn)很多小類,其他代碼查看人員不容易理解人乓。
- 有的客戶端代碼不是依賴于超類型勤篮,而是依賴某個特殊的裝飾類型或者基礎(chǔ)類型,裝飾將會受到限制色罚。
實際項目中的應(yīng)用
- 最著名的java.io庫設(shè)計