public abstract class Beverage
    {
        public string description;
        public string getDescription()
        {
            return description;
        }
        public abstract double cost();
    }
public abstract class CondimentDecorator:Beverage
    {
        public abstract string getDescription();
    }
public class DarkRoast:Beverage
    {
        public DarkRoast()
        {
            description = "DarkRoast";
        }
        public override double cost()
        {
            return 2.0;
        }
    }
public class Milk:CondimentDecorator
    {
        private Beverage beverage;
        public Milk(Beverage beverage)
        {
            this.beverage = beverage;
        }
        public override string getDescription()
        {
            return beverage.getDescription() + ",Milk";
        }
        public override double cost()
        {
            return beverage.cost() + 0.3;
        }
    }
 public class Mocha:CondimentDecorator
    {
        private Beverage beverage;
        public Mocha(Beverage beverage)
        {
            this.beverage = beverage;
        }
        public override string getDescription()
        {
            return beverage.getDescription() + ",Mocha";
        }
        public override double cost()
        {
            return beverage.cost() + 0.2;
        }
    }
class Program
    {
        static void Main(string[] args)
        {            
            Beverage beverage = new DarkRoast();
            Mocha mocha=new Mocha(beverage);
            Milk milk=new Milk(mocha);
            Console.WriteLine(milk.getDescription() + "$" + milk.cost());
            Console.ReadKey();
        }
    }
正确的结果应该为DarkRoast,Milk,Mocha $2.5大神求助装饰模式

解决方案 »

  1.   

        public abstract class Beverage
        {
            public string description;
            public virtual string getDescription()
            {
                return description;
            }
            public abstract double cost();
        }
        public class DarkRoast : Beverage
        {
            public DarkRoast()
            {
                description = "DarkRoast";
            }
            public override double cost()
            {
                return 2.0;
            }
        }
        public class Milk : Beverage
        {
            private Beverage beverage;
            public Milk(Beverage beverage)
            {
                this.beverage = beverage;
            }
            public override string getDescription()
            {
                return beverage.getDescription() + ",Milk";
            }
            public override double cost()
            {
                return beverage.cost() + 0.3;
            }
        }
        public class Mocha : Beverage
        {
            private Beverage beverage;
            public Mocha(Beverage beverage)
            {
                this.beverage = beverage;
            }
            public override string getDescription()
            {
                return beverage.getDescription() + ",Mocha";
            }
            public override double cost()
            {
                return beverage.cost() + 0.2;
            }
        }
        class Program
        {
            static void Main(string[] args)
            {
                Beverage beverage = new DarkRoast();
                Mocha mocha = new Mocha(beverage);
                Milk milk = new Milk(mocha);
                Console.WriteLine(milk.getDescription() + "$" + milk.cost());
                Console.ReadKey();
            }    }
    这样就行了呀为什么要加一个抽象方法
         public abstract class CondimentDecorator:Beverage
        {
            public abstract string getDescription();
        }