#include <iostream> using namespace std; class Component { public: virtual void Operation() = 0; }; class ConcreteComponent : public Component { public: virtual void Operation() { cout << "I am no decoratored ConcreteComponent" << endl; } }; class Decorator :public Component { private: Component *m_pComponent; public: Decorator(Component *p) { m_pComponent = p; } void Operation() { m_pComponent->Operation(); } }; class ConcreteDecoratorA : public Decorator { public: ConcreteDecoratorA(Component *p) :Decorator(p) { } void AddedBehavior() { cout << "This is added behavior A." << endl; } void Operation() { AddedBehavior(); Decorator::Operation(); } }; class ConcreteDecoratorB : public Decorator { public: ConcreteDecoratorB(Component *p) :Decorator(p) { } void AddedBehavior() { cout << "This is added behavior B." << endl; } void Operation() { AddedBehavior(); Decorator::Operation(); } }; int main() { Component *pComponent = new ConcreteComponent(); Decorator *pDecA = new ConcreteDecoratorA(pComponent); pDecA->Operation(); Decorator *pDecB = new ConcreteDecoratorB(pComponent); pDecB->Operation(); Decorator *pDecAB = new ConcreteDecoratorB(pDecA); pDecAB->Operation(); delete pDecAB; pDecAB = NULL; delete pDecB; pDecB = NULL; delete pDecA; pDecA = NULL; delete pComponent; pComponent = NULL; return 0; }
