标签:
#include <iostream> using namespace std; /* Component 类 */ class Component { public: virtual void Operation() = 0; }; /* 具体Component类,被修饰 */ class ConcreteComponent: public Component { public: void Operation() {cout<<"ConcreteComponent object‘s operation"<<endl;} }; /* Decorator 基类 */ class Decorator: public Component { public: void setComponent(Component *component); void Operation(); public: Component *m_component; }; void Decorator::setComponent(Component *component){ m_component = component; } void Decorator::Operation() { m_component->Operation(); } /* 具体Decorator类,修饰ConcreteComponent */ class ConcreteDecoratorA: public Decorator { public: void Operation(); }; void ConcreteDecoratorA::Operation() { Decorator::Operation(); cout<<"ConcreteDecoratorA object‘s operation"<<endl; } class ConcreteDecoratorB: public Decorator { public: void Operation(); }; void ConcreteDecoratorB::Operation() { Decorator::Operation(); cout<<"ConcreteDecoratorB object‘s operation"<<endl; } void main() { ConcreteComponent cc; ConcreteDecoratorA cdA; ConcreteDecoratorB cdB; cdA.setComponent(&cc); cdB.setComponent(&cdA); cdB.Operation(); system("pause"); }
Tips:
1. 为什么被修饰类和修饰类从同一个基类继承?
参考
ConcreteComponent cc;
ConcreteDecoratorA cdA;
ConcreteDecoratorB cdB;
cdA.setComponent(&cc);
cdB.setComponent(&cdA);
被修饰类ConcreteComponent和修饰类ConcreteDecorator都可以被修饰.
标签:
原文地址:http://www.cnblogs.com/hushpa/p/4428549.html