天天看點

裝飾模式

    裝飾者模式:動态地将責任附加到對象上。若要擴充對象,裝飾者提供了比繼承更有彈性的替代方案。

    舉例:有一家咖啡廳,主要飲料有咖啡,牛奶等。配料有糖,椰果等。每一款飲料都可以加入不限配料,但隻有一款主飲。

    此時,針對飲料有一個抽象類

咖啡,牛奶的實作如下:

為了實作裝飾模式,每一款配料都有一個基本抽象類,此抽象類繼承自beverage,但重寫了getDescription方法,用于輸出整個裝飾中所有的主料和配料名稱。

在具體裝飾類中,聚合了被裝飾的飲料。如下:

同樣,更深層次的包裝也可以這麼實作:

可以看出,無論裝飾多少層,所有的實作,其實都是一樣的。

以下是測試代碼:

以上就是全部源碼,裝飾類的典型應用就是I/O中streamBuffer等。

繼續閱讀