Head First 裝飾者模式

2021-06-27 01:19:39 字數 791 閱讀 4804

1.舉乙個簡單的例子:一種飲料黑咖啡,不新增為原味咖啡,新增調料摩卡為摩卡咖啡,新增牛奶味牛奶咖啡,新增巧克力為巧克力咖啡。

實現這個例子第乙個想法是基類黑咖啡,然後摩卡咖啡繼承自黑咖啡,牛奶咖啡、巧克力咖啡同理。這樣的實現看來還不錯,也使用了物件導向。

那麼,現在又有了新的需求:

(1)新增兩種及以上的調料,如摩卡牛奶咖啡,或者是新增雙倍調料,如雙倍摩卡咖啡。

(2)新增一種新的飲料茶,巧克力奶茶,牛奶奶茶。

如果滿足以上的兩個需求,就需要還要新增很多類,特別是當調料**變化時,可能很多類就需要跟著修改,維護起來就很困難。

2.乙個很重要的設計原則:類應該對擴充套件開放,對修改關閉。

目標是允許類容易擴充套件,在不修改**或者需要修改很少**的情況下,就可搭配新的行為。

3.裝飾者模式定義和功能

動態的將責任附加到物件上,若要擴充套件功能,裝飾者提供比繼承更有彈性的方案。該模式以提供對客戶端透明的方式擴充套件物件的功能。

4.涉及角色

抽象構件角色:定義乙個抽象介面,來規範準備附加功能的類。

具體構件角色:將要被附加功能的類,實現抽象構件角色介面。

抽象裝飾者角色:持有對具體構件角色的引用並定義與抽象構件角色一致的介面。

具體裝飾角色:實現抽象裝飾者角色,負責為具體構件新增額外功能。

5.優缺點

優點:(1)提供比繼承更多的靈活性

(2)使用不同的裝飾組合可以創造出不同行為的組合

(3)需要的類的數目減少

缺點:(1)靈活性帶來比較大的出錯性 

(2)產生更多的物件,給查錯帶來困難

HeadFirst設計模式 裝飾者

裝飾者模式動態地將責任附加到物件上,若要擴充套件功能,裝飾者提供了比繼承更有彈性的替代方案。這句話摘自書中,給人讀得很生硬難懂。通俗地來說,裝飾者和被裝飾者有相同的父類,裝飾者的行為組裝著被裝飾者的行為。author lollipop since 2019 11 26 public abstract...

HeadFirst 03,裝飾者模式

動態的將責任附加到物件上。想要擴充套件功能,裝飾者提供有別於繼承的另一種選擇。注 設計原則,類應該對擴充套件開放,對修改關閉。這樣做的目的是由於,這樣類易於擴充套件,在不修改原有 的情況下,可以搭配新的行為,這樣的設計具有彈性可以應對改變,便於擴充套件 裝飾者模式 飲料抽象類,所有的beverage...

Head First 之裝飾模式筆記

裝飾模式 給乙個類新增一些額外的職責,並且在新增這些額外的職責時不會控制該類的執行邏輯,也就是說動態地給乙個物件新增一些額外的職責,就增加功能來說,裝飾模式比繼承更為靈活。組成部分 抽象構件 原始的功能介面 具體構件 具體的原始功能類 裝飾角色 持有具體構件類的物件,以便執行原有功能 具體裝飾 具體...