設計模式 十五 裝飾模式 C

2021-10-02 11:29:37 字數 1429 閱讀 3380

意圖:動態地給乙個物件新增一些額外的職責。就增加功能來說,裝飾器模式相比生成子類更為靈活。

好處就是把核心功能和裝飾功能區分開來了

(要想真正理解裝飾模式的**實現,首先要理解多型的實現)

裝飾模式主要包含以下角色。

抽象構件(component)角色:定義乙個抽象介面以規範準備接收附加責任的物件。

具體構件(concrete    component)角色:實現抽象構件,通過裝飾角色為其新增一些職責。

抽象裝飾(decorator)角色:繼承抽象構件,幷包含具體構件的例項,可以通過其子類擴充套件具體構件的功能。

在下面的demo中,手機作為抽象構件,iphone 和nokia 作為具體構件,decoratorphone作為抽象裝飾,

decoratorphonea,decoratorphoneb作為具體裝飾,乙個代表掛件,乙個**貼膜。

裝飾模式的技術思想是:通過多型性呼叫各個裝飾

//公共抽象類

class phone

virtual ~phone()

{} virtual void showdecorate()

{}};

//具體的手機類

class iphone : public phone

~iphone()

{} void showdecorate() };

//具體的手機類

class nokiaphone : public phone

~nokiaphone()

{} void showdecorate() };

//裝飾類

class decoratorphone : public phone

virtual void showdecorate()

private:

phone *m_phone; //要裝飾的手機

};//具體的裝飾類

class decoratorphonea : public decoratorphone

void showdecorate()

private:

//增加的裝飾

void adddecorate() };

//具體的裝飾類

class decoratorphoneb : public decoratorphone

void showdecorate()

private:

//增加的裝飾

void adddecorate()

};int main()

c 設計模式 裝飾模式

裝 飾模式又名包裝模式,以對客戶端透明的方式擴充套件物件的功能,是繼承關係的乙個替代方案。它使用原來被裝飾的類的乙個子類的例項,把客戶端的呼叫委派到被裝 飾類,客戶端並不會覺得物件在裝飾前和裝飾後有什麼不同。在以下情況下應使用裝飾模式 需要擴充套件乙個類的功能,或給乙個類增加附加責任。動態地給乙個物...

c 設計模式(裝飾模式)

動態地給乙個物件新增一些額外的職責 不重要的功能,只是偶然一次要執行 就增加功能來說,裝飾模式比生成子類更為靈活。建造過程不穩定,按正確的順序串聯起來進行控制。good 當你向舊的類中新增新 時,一般是為了新增核心職責或主要行為。而當需要加入的僅僅是一些特定情況下才會執行的特定的功能時 簡單點就是不...

C 設計模式 裝飾模式

目錄 基本概念 和例項 裝飾模式是為已有功能動態地新增更多功能的一種方式。當系統需要新功能的時候,是向舊系統的類中新增新 這些新 通常裝飾了原有類的核心職責或主要行為。裝飾模式的優點 1.把類中的裝飾功能從類中搬移出去,這樣可以簡化原有的類 2.有效地把類的核心職責和裝飾功能區分開了。而且可以去除相...