The most Inner object , Pass the operation to outer object and so on.
This is a nice pattern approach.
here an example
using System;
namespace StarbuzzCoffee
{
    class Program
    {
        static void Main(string[] args)
        {
            Beverage beverage = new Espresso();
            beverage = new Mocca(beverage);
            Console.WriteLine("{0} {1}", beverage.Getdescription(), beverage.Cost());
            Beverage beverage2 = new Darkroast();
            //the pattern is this is inheritance
            //so the most inner object return the cost, the outer return + the inner
            //and so on and so on till outside
            beverage2 = new Mocca(beverage2);//see it change the base desc and 
            beverage2 = new Mocca(beverage2);//double mocha
            Console.WriteLine(beverage2.description + " " + beverage2.Cost());
            Console.ReadLine();
           
        }
    }
    public abstract class Beverage
    {
        public string description="unknown beverage";
        public virtual  string Getdescription()
        {
            return description;
        }
        public abstract double Cost();
    }
    //public  abstract  class  CondimentDecorator : Beverage
    //{
    //    public abstract string Getdescription();
    //}
    public  class  Espresso : Beverage
    {
        public  Espresso()
        {
            description = "Espresso";
        }
        public override double Cost()
        {
            return 1.99;
        }
    }
    public class Darkroast : Beverage
    {
        public Darkroast()
        {
            description = "Darkroast";
        }
        public override double Cost()
        {
            return .22;
        }
    }
    public class Houseblend : Beverage
    {
        public Houseblend()
        {
            description = "Houseblend";
        }
        public override double Cost()
        {
            return .89;
        }
    }
    public  class  Mocca: Beverage
    {
        private Beverage beverage;
        public  Mocca(Beverage theBevarage)
        {
            beverage = theBevarage;
 
        }
        public override string Getdescription()
        {
            return beverage.Getdescription() + ",Mocha"; 
        }
        public override double Cost()
        {
            return .20 + beverage.Cost();
        }
    }
}
Minggu, 09 Desember 2007
Langganan:
Posting Komentar (Atom)
1 komentar:
Decorators Pattern can be implemented
on several different ways.
Check my sample program that it can be done through Generic and Interface. http://salcad.blogspot.com/2007/12/generics-decorator-pattern.html
Posting Komentar