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 }