Design Pattern
  • Introduction
  • Chapter1: MVVM
  • Chapter2: 觀察者模式 (Observer Pattern)
  • Chapter3: 策略模式 (Strategy Pattern)
  • Chapter4: 單例/獨體模式 (Singleton)
  • Chapter5: 裝飾者模式 (Decorater Pattern)
  • Chapter6: 命令模式 (Command Pattern)
  • Chapter7: MVC
Powered by GitBook
On this page
  • This section contain the following items:
  • 1.Decorator Pattern

Was this helpful?

Chapter5: 裝飾者模式 (Decorater Pattern)

PreviousChapter4: 單例/獨體模式 (Singleton)NextChapter6: 命令模式 (Command Pattern)

Last updated 5 years ago

Was this helpful?

This section contain the following items:

1.Decorator Pattern

1.Decorator Pattern

  • 裝飾者模式要解決的問題:

    • 1.當主要物件搭配上各種裝飾品(屬性, 配件, 配料等)後會形成各種新物件, 並且與本來的物件有本質的差異, 若逐一實踐每個組合則會有重複實踐以及後續維護等問題存在

      • 例如飲料店有各種飲料, 每種飲料又可以添加各種配料, 其排列組合相當多

    • 2.使用繼承雖然可以解決類別爆炸的問題, 但一旦有新的組合需要被實踐時就必須修改這個物件, 但這樣就違反了開放封閉原則, 因此並不是一個好作法(以下圖片引用自"深入淺出設計模式")

  • 因此要如何解決以上問題呢? 就是利用裝飾者模式

    • 元件 + 裝飾者 = 裝飾者模式

    • 舉例來說, 客人希望一個darkroast咖啡, 或是darkroast的mocha咖啡, 又或是darkroast的mocha咖啡加上whip, 用裝飾者模式的做法就是將這三者拆開來, 因為其他種類的咖啡也可能會用到mocha或是whip(以下圖片引用自"深入淺出設計模式")

  • 角色(以下圖片引用自"深入淺出設計模式")

    • 裝飾者 (Decorator): 須實作的功能依需求而定

    • 元件 (Component): 須實作的功能依需求而定

  • 更仔細點觀察, 裝飾者與元件必須有相同的超類別, 也就是說必須實踐相同的Interface(以下圖片引用用自"深入淺出設計模式")

  • 實踐相同的Interface是為了要有正確的型態, 而不是繼承他的行為. 行為是來自裝飾者與元件, 或和其他裝飾者間的合成關係

  • 觀察者模式的優點

    • 2.裝飾者模式動態地將責任加諸於物件上. 若要擴充功能, 裝飾者提供了比繼承更有彈性的選擇

1.如同的優點, 藉由動態合成物件, 可以改寫新的程式碼擴充既有的系統而無需改變既有系統的程式碼

策略模式