您好,登錄后才能下訂單哦!
本文小編為大家詳細介紹“C++設計模式之裝飾模式怎么實現(xiàn)”,內(nèi)容詳細,步驟清晰,細節(jié)處理妥當,希望這篇“C++設計模式之裝飾模式怎么實現(xiàn)”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來學習新知識吧。
裝飾模式是一種經(jīng)典的類功能擴展模式,其精髓在裝飾類使用繼承加聚合的方式獲得接口和要實現(xiàn)對象,然后通過自己實現(xiàn)擴展接口
作用
裝飾模式通過裝飾類動態(tài)地將責任附加到對象上,若要擴展功能,無需通過繼承增加子類就能擴展對象的新功能,提供了比繼承更有彈性的替代方案,避免了子類數(shù)量膨脹帶來的系統(tǒng)臃腫。
代碼實現(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(); }
讀到這里,這篇“C++設計模式之裝飾模式怎么實現(xiàn)”文章已經(jīng)介紹完畢,想要掌握這篇文章的知識點還需要大家自己動手實踐使用過才能領(lǐng)會,如果想了解更多相關(guān)內(nèi)容的文章,歡迎關(guān)注億速云行業(yè)資訊頻道。
免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。