裝飾者模式

Starbuzz咖啡店裏有很多種咖啡,並且深受消費者喜愛,擴張速度非常快,以後可能會陸續增加其他的咖啡種類。

購買咖啡時,也可以要求在其中加入各種調料,例如:蒸奶(Steamed Milk)、豆漿(Soy)、摩卡(Moka,也就是巧克力口味)或覆蓋奶泡。Starbuzz會根據所加入的調料收取不同的費用。所以訂單必須考慮到這些調料部分。

問題來了:如何動態的添加各種調料呢?畢竟不同調料的價格不同,且以後添加了新的咖啡種類也不用修改已有的調料代碼。

設計原則:

類應該對擴展開放,對修改關閉

裝飾者模式:

動態地將責任附加到對象上。若要擴展功能,裝飾者提供了比繼承更有彈性的替代方案。

特點:

1、裝飾者和被裝飾者對象有相同的超類型。

2、你可以用一個或多個裝飾者包裝一個對象。

3、既然裝飾者和被裝飾者對象有相同的超類型,所以在任何需要原始對象(被包裝的)的場合,可以用裝飾過的對象代替它。

4、裝飾者可以在所委託被裝飾者的行爲之前與/或之後,加上自己的行爲,以達到特定的目的。

5、對象可以在任何時候被裝飾,所以可以在運行時動態地,不限量地用你喜歡的裝飾者來裝飾對象。


Java I/O 就是用裝飾者模式實現的!


發佈了23 篇原創文章 · 獲贊 9 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章