说明:本程序在2005 中调试绝对能够运行view plaincopy to clipboardprint?
using System;   
using System.Collections.Generic;   
using System.Text;   
  
namespace DecoratorModel   
{   
  
    /// <summary>   
    ///    
    /// xuejianxinokok@20090717   
    /// 装饰模式:被装饰的人 抽象基类   
    /// </summary>   
  
   public   abstract class Person   
    {   
  
      //被包装的方法   
       abstract  public void wrap();   
  
    }   
}   
------------------------------------------------   
  
using System;   
using System.Collections.Generic;   
using System.Text;   
  
namespace DecoratorModel   
{   
  
    /// <summary>   
    /// xuejianxinokok@20090717   
    /// 装饰模式:具体被包装的人 演员类   
    /// </summary>   
  
  public   class Player:Person   
    {   
  
  
      public override void wrap()   
      {   
          Console.WriteLine("我是一个演员,现在我只会演戏.");   
      }   
  
    }   
}   
  
  
---------------------------------------------------   
  
using System;   
using System.Collections.Generic;   
using System.Text;   
  
namespace DecoratorModel   
{   
    /// <summary>   
    /// xuejianxinokok@20090717   
    /// 装饰模式:演员经济人,专么进行演员的包装 抽象基类   
    /// </summary>   
 public  abstract    class WrapPerson :Person   
    {   
     //因为此经济人要对一个人进行包装,所以必须持有被包装人的一个实例   
     protected Person person;   
  
     //在构造函数中初始化被包装人   
  
     public WrapPerson(Person p)   
     {   
         this.person = p;   
        
     }   
  
  
        
  
  
  
    }   
}   
  
  
------------------------------------------------------   
  
  
using System;   
using System.Collections.Generic;   
using System.Text;   
  
namespace DecoratorModel   
{   
    /// <summary>   
    /// xuejianxinokok@20090717   
    /// 装饰模式:会用舞蹈包装人的经济人   
    /// </summary>   
  
  public   class DanceWrapPerson :WrapPerson   
    {   
      //调用基类构造函数初始化   
      public DanceWrapPerson (Person p):base(p)   
      {   
  
      }   
  
  
      //重写包装方法,并添加新的功能   
      public override void wrap()   
      {   
          person.wrap();   
        //  添加新功能   
          dance();   
  
  
      }   
  
      private void dance()   
      {   
          Console.WriteLine("现在学会了跳舞");   
         
      }   
  
  
  
    }   
}   
  
  
-----------------------------------------------------   
  
  
using System;   
using System.Collections.Generic;   
using System.Text;   
  
namespace DecoratorModel   
{   
    /// <summary>   
    /// xuejianxinokok@20090717   
    /// 装饰模式:会用唱歌包装人的经济人   
    /// </summary>   
  
   public  class SingWrapPerson :WrapPerson   
  
    {   
       //调用基类构造函数初始化   
       public SingWrapPerson(Person p)   
           : base(p)   
      {   
  
      }   
  
  
      //重写包装方法,并添加新的功能   
      public override void wrap()   
      {   
          person.wrap();   
        //  添加新功能   
          sing();   
  
  
      }   
  
      private void sing()   
      {   
          Console.WriteLine("现在学会了唱歌");   
         
      }   
  
  
    }   
}   
  
  
---------------------------------------------------   
  
  
using System;   
using System.Collections.Generic;   
using System.Text;   
  
namespace DecoratorModel   
{   
    /// <summary>   
    /// xuejianxinokok@20090717   
    /// 装饰模式:会用整容包装人的经济人   
    /// </summary>   
  
   public  class FaceWrapPerson:WrapPerson   
    {   
        //调用基类构造函数初始化   
       public FaceWrapPerson(Person p)   
           : base(p)   
      {   
  
      }   
  
  
      //重写包装方法,并添加新的功能   
      public override void wrap()   
      {   
          person.wrap();   
        //  添加新功能   
          face();   
  
  
      }   
  
      private void face()   
      {   
          Console.WriteLine("现在被整了容,变漂亮了");   
         
      }   
  
    }   
}   
  
--------------------------------   
  
using System;   
using System.Collections.Generic;   
using System.Text;   
  
namespace DecoratorModel   
{   
    /// <summary>   
    /// xuejianxinokok@20090717   
    /// 本程序模拟了一个普通的演员是怎样被包装成明星的过程   
    ///                       
    ///                        包装   
    /// 模拟思想:普通演员-------------->成名   
    /// </summary>   
  
    class Program   
    {   
        static void Main(string[] args)   
        {   
            Console.WriteLine("-------------未包装前---------------");   
            Console.WriteLine("");   
            Player p = new Player();   
  
            p.wrap();   
  
            Console.WriteLine("");   
            Console.WriteLine("-------------包装跳舞后---------------");   
            Console.WriteLine("");   
            DanceWrapPerson dwp = new DanceWrapPerson(p);   
  
            dwp.wrap();   
  
            Console.WriteLine("");   
            Console.WriteLine("-------------包装唱歌后---------------");   
            Console.WriteLine("");   
  
               
            SingWrapPerson  swp = new SingWrapPerson(dwp);   
            swp.wrap();   
  
            Console.WriteLine("");   
            Console.WriteLine("-------------包装整容后---------------");   
            Console.WriteLine("");   
  
            FaceWrapPerson fwp = new FaceWrapPerson(swp);   
  
            fwp.wrap();   
  
            Console.WriteLine("");   
            Console.WriteLine("-------------OK,我火了,我成明星了!---------------");   
  
            Console.ReadKey();   
  
        }   
    }   
}  
using System;
using System.Collections.Generic;
using System.Text;namespace DecoratorModel
{    /// <summary>
    /// 
    /// xuejianxinokok@20090717
    /// 装饰模式:被装饰的人 抽象基类
    /// </summary>   public   abstract class Person
    {      //被包装的方法
       abstract  public void wrap();    }
}
------------------------------------------------using System;
using System.Collections.Generic;
using System.Text;namespace DecoratorModel
{    /// <summary>
    /// xuejianxinokok@20090717
    /// 装饰模式:具体被包装的人 演员类
    /// </summary>  public   class Player:Person
    {
      public override void wrap()
      {
          Console.WriteLine("我是一个演员,现在我只会演戏.");
      }    }
}
---------------------------------------------------
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/xuejianxinokok/archive/2009/07/17/4357319.aspx

解决方案 »

  1.   

    using System;
    using System.Collections.Generic;
    using System.Text;namespace DecoratorModel
    {
        /// <summary>
        /// xuejianxinokok@20090717
        /// 装饰模式:演员经济人,专么进行演员的包装 抽象基类
        /// </summary>
     public  abstract    class WrapPerson :Person
        {
         //因为此经济人要对一个人进行包装,所以必须持有被包装人的一个实例
         protected Person person;     //在构造函数中初始化被包装人     public WrapPerson(Person p)
         {
             this.person = p;
         
         }
             }
    }
    ------------------------------------------------------
    using System;
    using System.Collections.Generic;
    using System.Text;namespace DecoratorModel
    {
        /// <summary>
        /// xuejianxinokok@20090717
        /// 装饰模式:会用舞蹈包装人的经济人
        /// </summary>  public   class DanceWrapPerson :WrapPerson
        {
          //调用基类构造函数初始化
          public DanceWrapPerson (Person p):base(p)
          {      }
          //重写包装方法,并添加新的功能
          public override void wrap()
          {
              person.wrap();
            //  添加新功能
              dance();
          }      private void dance()
          {
              Console.WriteLine("现在学会了跳舞");
          
          }    }
    }
    -----------------------------------------------------
    using System;
    using System.Collections.Generic;
    using System.Text;namespace DecoratorModel
    {
        /// <summary>
        /// xuejianxinokok@20090717
        /// 装饰模式:会用唱歌包装人的经济人
        /// </summary>   public  class SingWrapPerson :WrapPerson    {
           //调用基类构造函数初始化
           public SingWrapPerson(Person p)
               : base(p)
          {      }
          //重写包装方法,并添加新的功能
          public override void wrap()
          {
              person.wrap();
            //  添加新功能
              sing();
          }      private void sing()
          {
              Console.WriteLine("现在学会了唱歌");
          
          }
        }
    }
    ---------------------------------------------------
    using System;
    using System.Collections.Generic;
    using System.Text;namespace DecoratorModel
    {
        /// <summary>
        /// xuejianxinokok@20090717
        /// 装饰模式:会用整容包装人的经济人
        /// </summary>   public  class FaceWrapPerson:WrapPerson
        {
            //调用基类构造函数初始化
           public FaceWrapPerson(Person p)
               : base(p)
          {      }
          //重写包装方法,并添加新的功能
          public override void wrap()
          {
              person.wrap();
            //  添加新功能
              face();
          }      private void face()
          {
              Console.WriteLine("现在被整了容,变漂亮了");
          
          }    }
    }--------------------------------using System;
    using System.Collections.Generic;
    using System.Text;namespace DecoratorModel
    {
        /// <summary>
        /// xuejianxinokok@20090717
        /// 本程序模拟了一个普通的演员是怎样被包装成明星的过程
        ///                    
        ///                        包装
        /// 模拟思想:普通演员-------------->成名
        /// </summary>    class Program
        {
            static void Main(string[] args)
            {
                Console.WriteLine("-------------未包装前---------------");
                Console.WriteLine("");
                Player p = new Player();            p.wrap();            Console.WriteLine("");
                Console.WriteLine("-------------包装跳舞后---------------");
                Console.WriteLine("");
                DanceWrapPerson dwp = new DanceWrapPerson(p);            dwp.wrap();            Console.WriteLine("");
                Console.WriteLine("-------------包装唱歌后---------------");
                Console.WriteLine("");            
                SingWrapPerson  swp = new SingWrapPerson(dwp);
                swp.wrap();            Console.WriteLine("");
                Console.WriteLine("-------------包装整容后---------------");
                Console.WriteLine("");            FaceWrapPerson fwp = new FaceWrapPerson(swp);            fwp.wrap();            Console.WriteLine("");
                Console.WriteLine("-------------OK,我火了,我成明星了!---------------");            Console.ReadKey();        }
        }
    }
     运行结果:-------------未包装前---------------我是一个演员,现在我只会演戏.-------------包装跳舞后---------------我是一个演员,现在我只会演戏.
    现在学会了跳舞-------------包装唱歌后---------------我是一个演员,现在我只会演戏.
    现在学会了跳舞
    现在学会了唱歌-------------包装整容后---------------我是一个演员,现在我只会演戏.
    现在学会了跳舞
    现在学会了唱歌
    现在被整了容,变漂亮了-------------OK,我火了,我成明星了!---------------
      

  2.   

    这类玩意,都是那些死抱着上个世纪90年代末 java 编程的人搞出来的。如果你是个搞微软编程技术的,你能不使用事件来轻松实现?简单清晰的“事件”是一种编程“模式”,用不着搞那么许多雷人的各种各样模式!