22種設計模式 裝飾者模式

2021-10-21 17:03:18 字數 918 閱讀 9055

裝飾模式是一種結構型設計模式, 允許你通過將物件放入包含行為的特殊封裝物件中來為原物件繫結新的行為。

注意,裝飾模式和橋接模式很相似,沒學過橋接模式的小夥伴,可以看這篇部落格:22種設計模式——橋接模式。裝飾者模式和橋接模式的出發點都是一樣的,都是為了解決類**的問題,先講下這個問題:

舉個例子,比如星巴克賣咖啡,咖啡種類有:美式、拿鐵、摩卡,同時咖啡還可以加料:牛奶、巧克力、糖。這時如果按普通的方式,那是不是就要同時存在9(3 x 3)個子類,如果新增一種調料,就同時要多出三個類,這種設計顯然是不合理的。

所以就有了橋接模式和裝飾者模式解決這種情況,雖然他們兩者使用場景很相似,但還是有所不同的,兩個模式都是為了解決子類過多問題, 但他們的誘因不同:

這樣說可能有點抽象,以上面的星巴克咖啡例子來說,橋接模式和裝飾者模式都是分維度處理,比如可以分成咖啡種類、咖啡調料兩種維度,然後通過各自的方式連線起兩個維度。

但這裡不同的是橋接模式的物件是不穩定的,即有可能會產生新的維度,比如這裡的星巴克咖啡可能會出現一種新的維度:尺寸(超大杯、大杯、中杯);裝飾者模式的物件就是穩定的,它只關心兩個維度的問題,即它的目的很純粹,某乙個維度用於增強另乙個維度,應用在咖啡的例子就是星巴克的咖啡只有調料、種類兩個維度,不考慮尺寸的維度。

問得好,既然存在裝飾者模式,那就有它的道理,它肯定有一些橋接模式不具備的特性,這個特性就是裝飾者模式的某個維度對於另乙個維度的強化是可以遞迴新增的,正如開頭的套娃一樣,是可以不停的套的。應用到咖啡的例子,就是使用者可以點一杯美式咖啡,同時加糖和加牛奶。而橋接模式就做不到這一點,它只能組成點一杯大杯的加糖美式,無法新增另一種調料。

Golang設計模式 22裝飾者模式

其他設計模式 是指在不改變原有物件的基礎之上,將功能附加到物件上.提供了比繼承更靈活的替代方法,屬於結構型模式 動態的給乙個物件增加一些額外的職責,就增加功能來說,裝飾模式相比生產子類更為靈活 使用裝飾模式進行系統設計時將產生很多小物件,這些物件的區別在於它們之間相互連線的方式有所不同,而不是它們的...

23種設計模式 裝飾者設計模式

23種設計模式之一,英文叫decorator pattern,又叫包裝模式。裝飾模式是在不必改變原類檔案和使用繼承的情況下,動態地擴充套件乙個物件的功能。裝飾物件和真實物件有相同的介面。裝飾物件包含乙個真實物件的引用。裝飾物件接受所有來自客戶端的請求。它把這些請求 給真實的物件 裝飾物件可以在 這些...

23種設計模式之裝飾者模式

今天我來向大家講解一下裝飾者模式,裝飾者模式的設計原則同樣也是對擴充套件開放,對修改關閉,那我們就有了乙個問題,如何做到對修改關閉,對擴充套件開放呢?我們都知道,裝飾者模式的定義是動態地將責任附加到物件中,其實裝飾者模式也可以說是動態巢狀的乙個過程。就比如舉例來說,假如我現在到乙個商店中買了一杯牛奶...