想要擴充套件功能,裝飾者提供了有別於繼承的另外一種選擇。
裝飾者模式主要實現的功能是動態的給某乙個類新增一些額外的功能,它是乙個錦上添花者。想要擴充套件功能,裝飾者提供了有別於繼承的另外一種選擇。設計模式的原則是多用組合少用繼承。
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 實現)
觀察者模式 定義了一種一對多的依賴關係,讓多個觀察者物件同時監聽某一主題物件,在它的狀態發生變化時,會通知所有的觀察者.說直白點,觀察者模式很類似於c 中的事件,可是c 卻沒有事件機制,所以c 可以用觀察者模式代替事件。抽象主題 subject 角色 抽象主題角色提供維護乙個觀察者物件聚集的操作方法...
最常用的設計模式 觀察者模式(C 實現)
觀察者模式 定義了一種一對多的依賴關係,讓多個觀察者物件同時監聽某一主題物件,在它的狀態發生變化時,會通知所有的觀察者.說直白點,觀察者模式很類似於c 中的事件,可是c 卻沒有事件機制,所以c 可以用觀察者模式代替事件。抽象主題 subject 角色 抽象主題角色提供維護乙個觀察者物件聚集的操作方法...
設計模式 裝飾者模式
public abstract class beverage public abstract double cost public abstract class condimentdecorator extends beverage public class darkroast extends be...