設計模式之 裝飾者模式

2021-06-21 01:39:48 字數 1431 閱讀 5247

一、裝飾者模式

裝飾者模式又稱為包裝模式。

動態地給乙個物件增加新的職責。若要擴充套件功能,裝飾者提供了比繼承更有彈性的替代方案。

裝飾者模式顧名思義就是對乙個物件進行裝飾,具體怎樣裝飾呢?那就是給這個物件不斷的增加職責方法。給乙個物件增加方法不簡單啊,用繼承或者直接在物件的類中增加方法。如果我們要對自己的手機進行裝飾,今天給手機增加乙個掛件,明天給手機貼膜,下個月給手機增加乙個保護套,後面說不定還要給手機在裝扮一下...。這種場景下,我們直接用在物件的類中增加方法,後面我們會發現這樣改下去,不僅這個類很龐大,而且改一處好多地方都要動。最重要的一點這樣的修改違反了開放——封閉原則。

二、裝飾者模式uml圖

1.裝飾者模式的職責角色:

1) 抽象構建角色(component):

給出乙個抽象的介面,以規範準備接受附加責任的物件。可以理解為要被裝飾的抽象物件。

2)  具體的構建角色(concretecomponent):

定義乙個將要接受附加責任的類。可以理解為要被裝飾的具體物件。

3)  裝飾角色(docorator):

持有乙個抽象構建(component)角色的引用,並定義乙個與抽象構件一致的介面。

4)  具體的裝飾角色(concretedecorator):

負責給構建物件「貼上」附加的責任。

2 uml圖:

三、**實現

1.抽象構建角色介面定義:

2 具體的構建角色:

3 裝飾角色:

4 具體的裝飾:

5 客戶端呼叫:

設計模式之裝飾者模式

此模式動態將職責附加到物件上,若要擴充套件功能,裝飾者提供了比繼承更具彈性的代替方案,以一圖一概括。要點1 裝飾者和被裝飾物件有相同的超型別。2 可以用乙個或多個裝飾者包裝乙個物件。3 裝飾者可以在所委託被裝飾者的行為之前或之後,加上自己的行為,以達到特定的目的。4 物件可以在任何時候被裝飾,所以可...

設計模式之裝飾者模式

public abstract class beverage 返回當前飲品的 public abstract double cost 為了讓condiment decorator 調料裝飾者 能夠取代beverage,所以將它擴充套件至beverage類 public abstract class ...

設計模式之裝飾者模式

裝飾者模式 在不必改變原類檔案和使用繼承的情況下,動態地擴充套件乙個物件的功能。它是通過建立乙個包裝物件,也就是裝飾來包裹真實的物件。1 裝飾物件和真實物件有相同的介面。這樣客戶端物件就能以和真實物件相同的方式和裝飾物件互動。2 裝飾物件包含乙個真實物件的引用 reference 3 裝飾物件接受所...