using System;
namespace aa
{
    class DecoratePattern
    {
        static void Main(string[] args)
        {
            Person person = new Person("小菜");
            Sneaker ydx = new Sneaker();
            BigTrouser kk = new BigTrouser();
            TShirts dtx = new TShirts();
            ydx.Decorate(person);
            kk.Decorate(ydx);
            dtx.Decorate(kk);
            dtx.Show();                                 //这句话,里面具体运行先运行哪一步,后运行哪一步?
            Console.Read();
        }
    }    class Person
    {
        public Person()
        { }
        private string Name;
        public Person(string name)
        {
            this.Name = name;
        }
        public virtual void Show()
        {
            Console.WriteLine("装扮的{0}", Name);
        }
    }
    ///<summary>
    ///穿衣服的人
    ///</summary>    class Finery : Person
    {
        protected Person component;        //public Finery(Person _component)
        //{
        //    component = _component;
        //}
        //打扮
        public void Decorate(Person _component)
        {
            this.component = _component;
        }
        public override void Show()
        {
            if (component != null)
            {
                component.Show();
            }
           
        }
    }
    ///<summary>
    ///穿T_shirt的人
    ///</summary>    class TShirts : Finery
    {
        public override void Show()
        {
            Console.WriteLine("大T恤");
            base.Show();
        }
    }    ///<summary>
    ///穿裤子的人
    ///</summary>    class BigTrouser : Finery
    {
        public override void Show()
        {
            Console.WriteLine("跨裤");
            base.Show();
        }
    }    ///<summary>
    ///穿运动的人
    ///</summary>
    class Sneaker : Finery
    {
        public override void Show()
        {
            Console.WriteLine("跨");
            base.Show();
        }
    }
}输出的结果为:
       大T恤
       跨裤
       跨
       装扮的小菜
刚刚学这个模式!      原理基本了解了。     想知道这个例子是怎么运行的, 

解决方案 »

  1.   

    ydx.Decorate(person);
                kk.Decorate(ydx);
                dtx.Decorate(kk);
                dtx.Show()
    =>调用 dtx.Show()也就是先输出  大T恤 dtx中的commponent位 BigTrouser ,接着 调用它的实例
    kk,同样先输出 跨裤 接着调用 它里面的commponent的 show(),以此类推