設計模式 3 裝扮你的類(裝飾模式)

2021-09-06 02:58:37 字數 824 閱讀 2303

首先看看書上的例子吧!人穿衣服的例子!

類圖就不畫了,就是簡單的類結構。

**如下:

#include using namespace std;

class person

void weartshirts()

如果要新新增一種裝扮,那麼就需要修改person類的結構,這樣就違反了開閉原則那就先做抽象好了,把變化的抽象出來,於是類圖結構如下

對應這個實現上面的程式,好像是方便了一些,但是如果繼續增加需求呢?就會出現很多的子類。

從而引出裝飾模式

裝飾模式是動態的給物件增加一些屬性和職責

類結構如下

componment是定義的乙個物件介面,可以給這些物件動態的新增職責

concertcomponent是要被裝飾的物件,即原始物件

dectorator是裝飾抽象類

concertdectoratora和concertdectoratorb是具體的裝飾物件。

看看原來的類圖修改如下

這樣,就可以實現對人物件的動態裝載,不過,這個例子舉得感覺不是很好,沒有列出裝飾模式的精髓。

設計模式 3 裝扮你的類(裝飾模式)

首先看看書上的例子吧!人穿衣服的例子!類圖就不畫了,就是簡單的類結構。如下 include using namespace std class person void weartshirts 如果要新新增一種裝扮,那麼就需要修改person類的結構,這樣就違反了開閉原則那就先做抽象好了,把變化的抽象...

設計模式3 裝飾者模式

動態的將責任附加到物件上。想要擴充套件功能,裝飾者提供有別於繼承的另一種選擇 封裝變化 多用組合,少用繼承 針對介面程式設計,不針對實現程式設計 為互動物件之間的松耦合設計而努力 對擴充套件開放,對修改關閉 在購買咖啡時,可以要求在其中加入各種調料,例如 蒸奶,豆漿,摩卡等其他調料,會根據加入的不同...

設計模式 (3)裝飾者模式

動態的將責任附加到物件上,在擴充套件功能上,裝飾者提供了比繼承更有彈性的替代方案。維護了開放封閉原則 對擴充套件開放,對修改封閉 將裝飾者和具體元件組合,就是在加入新的行為。組合和委託可以在執行時動態的加上新的行為。而繼承雖然也屬於擴充套件形式之一,但是非彈性設計,而且依賴繼承,類的行為只能在編譯時...