設計模式筆記 - 裝飾模式
分類
- 結構型
模式的目的(定義)
- 利用一個與當前對象(被裝飾者)具有相同基類的類(裝飾者),把當前對象包裝起來,從而得以在裝飾者對象中擴展被裝飾者的功能
- 提供了一種更有彈性的方案,來替代以創建多個子類來擴展對象功能的「子類化」方案
- 對象功能不再由編譯時通過繼承結構來決定
使用場景例子
- 有一些對象之間具有一些共同的屬性,但是在細節功能上又有區別。我們可能會通過創建一個基類,N個子類的方式來實現功能的擴展
- 比如基類為咖啡,其子類可能有:
- 牛奶咖啡
- 黑咖啡
- 酸味咖啡
- 等等
- 這個時候,每種具體咖啡的「職責」就是在編譯時的繼承結構中決定的,每當有一種新的咖啡時,就會有一個新的子類,比如「酸味牛奶咖啡」,最後很容易導致子類的數量爆炸,難以應對變化
- 比如基類為咖啡,其子類可能有:
- 這類情況就可以使用裝飾模式,去封裝咖啡的各種「額外職責」,而不需要創建各種不同職責的咖啡子類
類圖

使用限制
- 由於客戶在外層所引用的變量類型,仍然是抽象的類型(Component),因此,一些針對於具體類型的操作,可能就無法實現
參考書目
- 《Head First Design Patterns》Eric Freeman, Elisabeth Robson, Kathy Sierra, Bert Bates