iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 12
1
Software Development

你終究都要學設計模式的,那為什麼不一開始就學呢?系列 第 12

Day12. 裝飾者模式

本文同步更新於blog

Decorator Pattern

動態地將責任附加到對象上。

若要擴展功能,裝飾者提供了比繼承更有彈性的替代方案。


裝飾者模式會將類別分為兩類:
分別是裝飾物件類別 (ConcreteComponent)裝飾者類別 (Decorator)

其中裝飾物件與裝飾者會實現相同的接口

在裝飾物件不知道裝飾者的情況下,
我們會在產生對象時,動態地將其一個個裝飾上去。

一般會透過建構函式來包裝先前的裝飾者。
便於理解,裝飾物件即被裝飾者。


優點:
當需要動態reuse寫好的類別方法時,
裝飾者模式提供了用組合取代繼承的解決方案。(一種wrapping的委託技術)

職責切分明確,裝飾者類別僅需完成自己的方法,由客戶端決定執行順序。

缺點:
程式碼複雜度提高。
當方法不依賴執行順序時,無法用裝飾者模式實作。


與其他模式的比較:

[策略模式]:
以卡牌遊戲比喻的話,策略模式是決定要出哪張怪獸卡
而裝飾者模式則是在原有的怪獸卡上,加上裝備卡


ʕ •ᴥ•ʔ:裝飾者模式專注在對象上,也就更能客製化需求。
(動態產生對象,而不是子類)


上一篇
Day11. 範例:收銀機 (策略模式)
下一篇
Day13. 範例:漢堡點餐系統(裝飾者模式)
系列文
你終究都要學設計模式的,那為什麼不一開始就學呢?57
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言