C 設計模式(三) 裝飾模式

2021-08-17 23:10:04 字數 1760 閱讀 4834

動態的給乙個物件新增一些額外的職責,就增加功能來說,裝飾模式比生成子類更為靈活。
本文使用書中裝飾衣服的例子,**使用c++語言描述,**存在的不足或問題有望各位指出。

(1)首先我們看一下裝飾模式的**框架

////裝飾模式

#include

using namespace std;

class component

virtual ~component(){}

virtual

void operation()=0;

};class concretecomponnet : public component

void operation() override

//重寫operation(),實際執行的是component的operation()

protected:

component *component;

};class concretedecoratora : public decorator

;class concretedecoratorb: public decorator

};int main ()

component 是定義乙個物件介面,可以給這些物件動態地新增職責。concretecomponnet是定義了乙個具體的物件,也可以給這個物件新增一些職責。decorator,裝飾抽象類,繼承了component,從外類來擴充套件component類的功能,但對於component來說,是無需知道decorator的存在的。至於concretedecorator就是具體的裝飾物件,起到給component新增職責的功能。

(2)裝飾衣服的例項

////裝飾模式

#include

using namespace std;

class component

virtual ~component(){}

virtual

void operation()=0;

};class concretecomponnet : public component

void operation() override

//重寫operation(),實際執行的是component的operation()

protected:

component *component;

};class concretedecoratora : public decorator

;class concretedecoratorb: public decorator

};int main ()

如果只有乙個concretecomponent類沒有抽象的component類,那麼decorator類可以是concretecomponent的乙個子類。同樣道理,如果只有乙個concretedecorator類,那麼就沒有必要建立乙個單獨的decorator類,而可以把decorator和concretedecorator的責任合併成乙個類

裝飾模式是為已有功能動態地新增更多功能的一種方式。當系統需要新功能的時候,是向舊的類中新增新的**,這些新的**通常裝飾了原有類的核心職責或主要行為。裝飾模式提供了乙個非常好的解決方案,它把每個裝飾的功能放在單獨的類中,並讓這個類包裝它所要裝飾的物件。裝飾模式的優點可以總結為,把類中的裝飾功能從類中搬移去除,這樣可以簡化原有的類。

設計模式 三 裝飾模式

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

設計模式 裝飾模式(三)

裝飾模式 軟體領域中的設計模式的重要性不言而喻。設計模式中運用了物件導向程式設計語言的重要特性 封裝 繼承 多型。雖然知道這些特性的定義但是並沒有做到真正的理解,這樣特性有什麼作用?用於什麼場合中等等問題,帶著疑問開始學習設計模式,主要參考 大話設計模式 和 設計模式 可復用物件導向軟體的基礎 兩本...

c 設計模式 裝飾模式

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