站長留言

  • ✅ 本站維護及更新歷史紀錄,詳情請參考公告
  • ✅ 有任何意見、想法,歡迎留言給Spicy知道喔
  • ✅ 固定於每周一至周五更新Blogger文章,周末不定期
程式Design PatternJava

【Design Pattern】3:Decorator Pattern 裝飾者模式、修飾模式 (結構)

上一篇:Observer Pattern 觀察者模式、監聽者模式 (行為)

Introduction 簡介

  • 動態的為物件增加功能
  • 當有一群本質相近但又個有些不盡相同的東西的時候


Decorator Pattern

  1. 設計守則:open/close,擴充開放,對修改封閉,易擴充功能,且擴充時原有的code都不需修改
  2. Decorator Pattern中的繼承,是為了讓Decorator與被Component必須是一樣的型態
    • Decorator 反映出 Component 的 type
    • 方法 (行為) 是來自於 composition
  3. 實現方式:composition + delegation
  4. Decorator 可以在所委派被裝飾者的行為,之前或之後加上自己的行為
    @Override public String getDescription() { //return component.getDescription() + ", DecoA"; return "DecoA, " + component.getDescription(); }
  5. Decorator Pattern的缺點:
    • Decorator會導致程式出現很多小class

Comparison 比較

  • 相同點:都可以在run-time變動一個物件的特性
Decorator Pattern Strategy Pattern
增加特性 改變特性
使用的人必須知道有什麼strategy option,跟現在apply了哪一個strategy
(就是你必須有一個strategy物件)
但Decorator Pattern不用 因為Decorator像是從外面改變了這個object
(被包了一層)
換了骨頭 換皮變臉

Example 範例

  1. SideDish 副餐為裝飾者

  2. 起司、火腿 為裝飾者

Code 程式碼範例

Reference 參考資料

  1. 圖片:https://stackoverflow.com/questions/43565475/using-lists-instead-of-decorator-pattern
  2. 裝飾者模式筆記:https://dotblogs.com.tw/pin0513/archive/2010/01/04/12779.aspx
  3. 設計模式之Decorator(油漆工):http://www.dotspace.idv.tw/Patterns/Jdon_Decorator.htm
  4. 比較 策略 vs 裝飾者:https://stackoverflow.com/questions/26422884/strategy-pattern-v-s-decorator-pattern
  5. 比較:https://www.jyt0532.com/2017/04/18/decorator/
  6. 範例圖片:https://openhome.cc/Gossip/DesignPattern/DecoratorPattern.htm
下一篇:Factory Method Pattern 工廠方法模式 (創造)

沒有留言:

張貼留言

本網站建議使用電腦或平板瀏覽