Head First 之裝飾模式筆記

2021-09-30 15:23:36 字數 711 閱讀 3111

裝飾模式:給乙個類新增一些額外的職責,並且在新增這些額外的職責時不會控制該類的執行邏輯,也就是說動態地給乙個物件新增一些額外的職責,就增加功能來說,裝飾模式比繼承更為靈活。

組成部分:

抽象構件:原始的功能介面

具體構件:具體的原始功能類

裝飾角色:持有具體構件類的物件,以便執行原有功能

具體裝飾:具體擴充套件的功能在這裡

裝飾模式的特點;

(1) 裝飾物件和真實物件有相同的介面。這樣客戶端物件就可以以和真實物件相同的方式和裝飾物件互動。

(2) 裝飾物件包含乙個真實物件的索引(reference)

(3) 裝飾物件接受所有的來自客戶端的請求。它把這些請求**給真實的物件。

(4) 裝飾物件可以在**這些請求以前或以後增加一些附加功能。這樣就確保了在執行時,不用修改給定物件的結構就可以在外部增加附加的功能。在物件導向的設計中,通常是通過繼承來實現對給定類的功能擴充套件。

例如去酒吧喝酒,那麼酒就是抽象構件,至於你喝的什麼酒(白蘭地,威士忌)就是具體構件,裝飾角色可以看做是你要往酒裡面兌的東西,你往酒裡面兌了東西,就相當於你把酒裝飾了一番,我就知道和在一起的是什麼酒,至於兌什麼就是具體裝飾了,你可以兌紅茶,也可以兌綠茶,因此最後付賬的時候你就可以知道是什麼酒兌什麼茶,一目了然。

類圖如下:

Head First 裝飾者模式

1.舉乙個簡單的例子 一種飲料黑咖啡,不新增為原味咖啡,新增調料摩卡為摩卡咖啡,新增牛奶味牛奶咖啡,新增巧克力為巧克力咖啡。實現這個例子第乙個想法是基類黑咖啡,然後摩卡咖啡繼承自黑咖啡,牛奶咖啡 巧克力咖啡同理。這樣的實現看來還不錯,也使用了物件導向。那麼,現在又有了新的需求 1 新增兩種及以上的調...

HeadFirst設計模式 裝飾者

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

HeadFirst 03,裝飾者模式

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