裝飾者模式:動态地将責任附加到對象上。若要擴充對象,裝飾者提供了比繼承更有彈性的替代方案。
舉例:有一家咖啡廳,主要飲料有咖啡,牛奶等。配料有糖,椰果等。每一款飲料都可以加入不限配料,但隻有一款主飲。
此時,針對飲料有一個抽象類
咖啡,牛奶的實作如下:
為了實作裝飾模式,每一款配料都有一個基本抽象類,此抽象類繼承自beverage,但重寫了getDescription方法,用于輸出整個裝飾中所有的主料和配料名稱。
在具體裝飾類中,聚合了被裝飾的飲料。如下:
同樣,更深層次的包裝也可以這麼實作:
可以看出,無論裝飾多少層,所有的實作,其實都是一樣的。
以下是測試代碼:
以上就是全部源碼,裝飾類的典型應用就是I/O中streamBuffer等。