1 #include <iostream> 2 using namespace std; 3 4 class compoent 5 { 6 public: 7 compoent(){} 8 virtual ~compoent(){} 9 10 virtual void Operation(){}; 11 }; 12 13 class concretecompoent:public compoent{ 14 virtual void Operation(){cout<<"I can only do AAAAAAAAAAAAAA!!!!\n";}; 15 16 }; 17 18 class decorator:public compoent{ 19 public: 20 virtual void Operation(){}; 21 }; 22 23 class concretedecorator1:public decorator{ 24 public: 25 compoent* p_com; 26 concretedecorator1(compoent* var){ 27 p_com=var; 28 } 29 virtual void Operation(){ 30 p_com->Operation(); 31 cout<<"I can also do BBBBBBBBBBBBBB!!!!\n"; 32 } 33 }; 34 35 class concretedecorator2:public decorator{ 36 public: 37 compoent* p_com; 38 concretedecorator2(compoent* var){ 39 p_com=var; 40 } 41 virtual void Operation(){ 42 p_com->Operation(); 43 cout<<"I can also do CCCCCCCCCCCCCCC!!!!\n"; 44 } 45 }; 46 int main() 47 { 48 compoent* orign=new concretecompoent(); 49 orign->Operation(); 50 concretedecorator1* decor1=new concretedecorator1(orign); 51 concretedecorator2* decor2=new concretedecorator2(decor1); 52 concretedecorator1* decor3=new concretedecorator1(decor2); 53 decor3->Operation(); 54 return 0; 55 }