設計模式之裝飾模式
1、裝飾模式相關介紹:
a、裝飾模式的職責:
- 動態的為一個對象增加新的功能
- 裝飾模式是一種用於代替繼承的技術,無需通過繼承增加子類就能夠擴展對象的新功能。使用對象的關聯關系代替繼承關系,更加靈活,同時避免了類型體系的快速膨脹。
b、實現細節:
- Component 抽象構件角色:
* 真正的對象和裝飾對象有相同的接口。這樣,客戶端對象就能夠以與真正對象相同的方式同裝飾對象交互。
- ConcreteComponent 具體構件角色(真實對象):
* io 流中的 FileInputStream、FileOutputStream。
- Decorator 裝飾角色:
* 持有一個抽象對象構件的引用。裝飾對象接受所有客戶端的請求,並把這些請求轉發給真實的對象。這樣,就能在真實對象調用後增加新的功能。
- ConcreteDecorator 具體裝飾角色:
* 負責給構件對象增加新的責任。
2、簡單的代碼演示:
a、創建一個 ICar 接口(Component 抽象構件角色),Car 類(ConcreteComponent 具體構件角色)、SuperCar 類(Decorater 裝飾角色)實現了 ICar 接口,FlyCar 類、WaterCar 類、AICar 類(ConcreteDecorator 具體裝飾角色)繼承了 SuperCar 類。
b、看看在 Client11 測試類中輸出的結果,還有它的類圖關系。
3、裝飾模式的總結:
- 裝飾模式(Decorator)也叫包裝器模式(Wrapper)
- 裝飾模式降低系統的耦合度,可以動態的增加或者刪除對象的職責,並使得需要裝飾的具體構建類和具體裝飾類可以獨立變化,以便增加新的具體構建類和具體裝飾類。
其優點:
- 擴展對象的功能,比繼承靈活,不會導致類個數急劇增加。
- 可以對一個對象進行多次裝飾,創建出不同行為的組合,得到功能更強大的對象。
- 具體構建類和具體裝飾類可以獨立變化,用戶可以根據需要自己增加新的具體構件子類和具體裝飾子類。
其缺點:
- 產生很多小對象。大量小對象占據內存,一定程度上影響性能
- 裝飾模式易於出錯,調試排查比較麻煩。
本文出自 “12392717” 博客,請務必保留此出處http://12402717.blog.51cto.com/12392717/1928789
設計模式之裝飾模式