設計模式C 實現(11) 裝飾模式

2021-08-22 14:50:35 字數 1495 閱讀 3379

裝飾者模式主要實現的功能是動態的給某乙個類新增一些額外的功能,它是乙個錦上添花者。想要擴充套件功能,裝飾者提供了有別於繼承的另外一種選擇。設計模式的原則是多用組合少用繼承。

uml 圖:

特點:1. 裝飾者和被裝飾者擁有相同的超型別(可能是抽象類也可能是介面)

2. 可以用多個裝飾類來包裝乙個物件,裝飾類可以包裝裝飾類或被裝飾物件

3. 因為裝飾者和被裝飾者擁有相同的抽象型別,因此在任何需要原始物件(被包裝)的場合,都可以用裝飾過的物件來替代它。

4. 裝飾者可以在被裝飾者的行為之前或之後,加上自己的附加行為,以達到特殊目的

5. 因為物件可以在任何的時候被裝飾,所以可以在執行時動態地、不限量地用你喜歡的裝飾者來裝飾物件

案例分析

假如你老婆喜歡化妝,她每天早上照鏡子著鏡子都化妝,化妝的時候要塗口紅,畫睫毛,抹香水。老婆化妝的這個過程便是乙個典型的裝飾者模式,而口紅,眼線筆,香水,顯然就是裝飾品。

首先是愛照鏡子的女人:

class iwomen

;

然後老婆是個愛照鏡子的喜歡打扮的女人(具體需要裝飾物件)

class wife : public iwomen

void lookintothemirror()

virtual void makeup() = 0; //化妝

protected:

iwomen* m_women;

};

下面是具體3種用於化妝的化妝品: 口紅,睫毛膏,香水

class lipstick : public decoratorwomen

; void makeup() };

class mascara : public decoratorwomen

; void makeup() };

class perfume : public decoratorwomen

; void makeup()

};

客戶端,老婆照鏡子

iwomen* mywife = new wife();

lipstick* lips = new lipstick(mywife);

mascara* mas = new mascara(lips);

perfume* per = new perfume(mas);

mywife = per;

mywife->lookintothemirror();

//釋放各種資源...

介面卡模式和裝飾者模式的區別:

介面卡將乙個物件包裝起來以改變其介面;裝飾者將乙個物件包裝起來以增強新的行為和責任;而外觀將一群物件包裝起來以簡化其介面。要注意裝飾著模式的兩個抽象類,乙個是compent, 還有乙個是decorator。

C 實現 設計模式 11 裝飾模式

參考書籍 每當會想起考試卷簽字這件事都會讓我背脊發涼 然而在四年級的期末考試 學校出了乙個損招 列印成績單 要讓家長簽字 然後才能上五年級 當時那個恐懼 有那麼一瞬間覺得念書就到此為止了 這份成績單可以使用類來表示 如下 抽象成績單 class schoolreport 四年級成績單 class f...

C 與設計模式(11) 裝飾模式

裝飾模式動態地給乙個物件新增一些額外的職責。就增加功能來說,裝飾模式相比生成子類更為靈活。裝飾模式注重功能的拓展,增加了類的組合,減少了類之間的繼承,而多個裝飾類進行排練組合,可以創造出不同行為的組合。穿衣服的人 class people class someone public people 衣服...

設計模式之裝飾模式 C 實現

有時候我們需要在某個類已有的功能中新增新的功能。此時我們可以用繼承的方式來給類新增功能。我們也可以用裝飾模式來實現。裝飾模式,動態的給乙個物件新增功能。與繼承的方式相比,它更有靈活性。裝飾模式實現思路是。在原有物件上嵌入想要擴充套件的裝飾器。裝飾器實現裝飾功能。其中,component定義乙個物件介...