C++設(shè)計(jì)模式之裝飾模式(Decorator)
裝飾模式是一種經(jīng)典的類功能擴(kuò)展模式,其精髓在裝飾類使用繼承加聚合的方式獲得接口和要實(shí)現(xiàn)對(duì)象,然后通過自己實(shí)現(xiàn)擴(kuò)展接口
作用
裝飾模式通過裝飾類動(dòng)態(tài)地將責(zé)任附加到對(duì)象上,若要擴(kuò)展功能,無需通過繼承增加子類就能擴(kuò)展對(duì)象的新功能,提供了比繼承更有彈性的替代方案,避免了子類數(shù)量膨脹帶來的系統(tǒng)臃腫。
類視圖
代碼實(shí)現(xiàn)
class Component { public: Component(){} virtual ~Component(){} virtual void operation() = 0; }; class ConcreteComponentA : public Component { public: ConcreteComponentA(){} ~ConcreteComponentA(){} void operation() { fprintf(stderr, "ConcreteComponentA's operation!\n"); } }; class ConcreteComponentB : public Component { public: ConcreteComponentB(){} ~ConcreteComponentB(){} void operation() { fprintf(stderr, "ConcreteComponentB's operation!\n"); } }; class Decorator : public Component { public: Decorator() :mComponent(NULL){} virtual ~Decorator(){} virtual void operation() { if (mComponent) mComponent->operation(); } virtual void setComponent(Component* pComponent) { mComponent = pComponent; } protected: Component* mComponent; }; class ConcreteDecoratorE : public Decorator { public: ConcreteDecoratorE (); virtual ~ConcreteDecoratorE (); virtual void addBehavior() { mComponent->operation(); fprintf(stderr, "ConcreteDecoratorE's addBehavior!\n"); } }; class ConcreteDecoratorF : public Decorator { public: ConcreteDecoratorF (); virtual ~ConcreteDecoratorF (); virtual void addBehavior() { operation(); fprintf(stderr, "ConcreteDecoratorF's addBehavior!\n"); } }; int main() { ConcreteComponentB *pComponent = new ConcreteComponentB(); ConcreteDecoratorF decorator; decorator.setComponent(pComponent); decorator.addBehavior(); }
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
使用C語言的fork()函數(shù)在Linux中創(chuàng)建進(jìn)程的實(shí)例講解
這篇文章主要介紹了使用C語言的fork()函數(shù)在Linux中創(chuàng)建進(jìn)程的實(shí)例講解,fork在父進(jìn)程下創(chuàng)建出的子進(jìn)程可以與父進(jìn)程一起來多進(jìn)程運(yùn)行同一個(gè)程序,需要的朋友可以參考下2016-06-06淺析C++中dynamic_cast和static_cast實(shí)例語法詳解
這篇文章主要介紹了淺析C++中dynamic_cast和static_cast實(shí)例演示,包括static_cast語法知識(shí)和static_cast的作用講解,namic_cast 語法詳解,需要的朋友可以參考下2021-07-07剖析C語言關(guān)鍵字之void,const,return
這篇文章主要為大家介紹了C語言關(guān)鍵字之void,const,return,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助2022-01-01sqlserver,sqlite,access數(shù)據(jù)庫(kù)鏈接字符串整理
本節(jié)主要整理sqlserver,sqlite,access數(shù)據(jù)庫(kù)鏈接字符串,有需要的朋友可以參考下2014-07-07Visual Studio 2022 的安裝和創(chuàng)建C++項(xiàng)目(圖文教程)
本文主要介紹了Visual Studio 2022 的安裝和創(chuàng)建C++項(xiàng)目,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-05-05