裝飾模式是一種經典的類功能擴展模式,其精髓在裝飾類使用繼承加聚合的方式獲得接口和要實現對象,然后通過自己實現擴展接口
作用
裝飾模式通過裝飾類動態地將責任附加到對象上,若要擴展功能,無需通過繼承增加子類就能擴展對象的新功能,提供了比繼承更有彈性的替代方案,避免了子類數量膨脹帶來的系統臃腫。
類視圖
代碼實現
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();}
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VEVB武林網。
新聞熱點
疑難解答