← 筆記

設計模式筆記 - 裝飾模式

分類

  • 結構型

模式的目的(定義)

  • 利用一個與當前對象(被裝飾者)具有相同基類的類(裝飾者),把當前對象包裝起來,從而得以在裝飾者對象中擴展被裝飾者的功能
  • 提供了一種更有彈性的方案,來替代以創建多個子類來擴展對象功能的「子類化」方案
    • 對象功能不再由編譯時通過繼承結構來決定

使用場景例子

  • 有一些對象之間具有一些共同的屬性,但是在細節功能上又有區別。我們可能會通過創建一個基類,N個子類的方式來實現功能的擴展
    • 比如基類為咖啡,其子類可能有:
      • 牛奶咖啡
      • 黑咖啡
      • 酸味咖啡
      • 等等
    • 這個時候,每種具體咖啡的「職責」就是在編譯時的繼承結構中決定的,每當有一種新的咖啡時,就會有一個新的子類,比如「酸味牛奶咖啡」,最後很容易導致子類的數量爆炸,難以應對變化
  • 這類情況就可以使用裝飾模式,去封裝咖啡的各種「額外職責」,而不需要創建各種不同職責的咖啡子類

類圖

使用限制

  • 由於客戶在外層所引用的變量類型,仍然是抽象的類型(Component),因此,一些針對於具體類型的操作,可能就無法實現

參考書目

  • 《Head First Design Patterns》Eric Freeman, Elisabeth Robson, Kathy Sierra, Bert Bates