装饰模式: 
把所需的功能按正确的顺序串联起来 
动态的给一个对象添加一些职责
 
示例 
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 class  Person {     public  Person ()  { }     private  string  name;     public  Person (string  name )     {         this .name = name;     }     public  virtual  void  Show ()     {         Console.Write("{0}穿着" , name);     } } class  Finery  : Person  {     protected  Person component;     public  void  Decorate (Person component )     {         this .component = component;     }     public  override  void  Show ()     {         component?.Show();     } } class  TShirts  : Finery {     public  override  void  Show ()     {         base .Show();         Console.Write("T恤 " );     } } class  BigTrouser  : Finery {     public  override  void  Show ()     {         base .Show();         Console.Write("垮裤 " );     } } class  Silpper  : Finery {     public  override  void  Show ()     {         base .Show();         Console.Write("拖鞋 " );     } } Person ps = new  Person("小明" ); BigTrouser bt = new  BigTrouser(); TShirts ts = new  TShirts(); Silpper s = new  Silpper(); bt.Decorate(ps); ts.Decorate(bt); s.Decorate(ts); s.Show(); 
 
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 public  interface  Shape  {   void  draw () ; } public  class  Rectangle  implements  Shape  {     @Override     public  void  draw ()  {       System.out.println("Shape: Rectangle" );    } } public  class  Circle  implements  Shape  {     @Override     public  void  draw ()  {       System.out.println("Shape: Circle" );    } } public  abstract  class  ShapeDecorator  implements  Shape  {   protected  Shape decoratedShape;      public  ShapeDecorator (Shape decoratedShape) {       this .decoratedShape = decoratedShape;    }      public  void  draw () {       decoratedShape.draw();    }   } public  class  RedShapeDecorator  extends  ShapeDecorator  {     public  RedShapeDecorator (Shape decoratedShape)  {       super (decoratedShape);         }      @Override     public  void  draw ()  {       decoratedShape.draw();                setRedBorder(decoratedShape);    }      private  void  setRedBorder (Shape decoratedShape) {       System.out.println("Border Color: Red" );    } } public  class  DecoratorPatternDemo  {   public  static  void  main (String[] args)  {         Shape  circle  =  new  Circle ();       ShapeDecorator  redCircle  =  new  RedShapeDecorator (new  Circle ());       ShapeDecorator  redRectangle  =  new  RedShapeDecorator (new  Rectangle ());                     System.out.println("Circle with normal border" );       circle.draw();         System.out.println("\nCircle of red border" );       redCircle.draw();         System.out.println("\nRectangle of red border" );       redRectangle.draw();    } }