装饰模式

来源:互联网 发布:游泳馆收费软件 编辑:程序博客网 时间:2024/06/10 06:26
    class Program
    
{
        
static void Main(string[] args)
        
{

            Beverage beverage 
= new Espresso();
            Console.WriteLine(beverage.getDesciption() 
+ "$" + beverage.cost());

            Beverage beverage2 
= new Espresso();
            Beverage beverage3 
= new Mocha(beverage2);
            Beverage beverage4 
= new Mocha(beverage3);
            beverage3 
= new Mocha(beverage2);
            beverage2 
= new Mocha(beverage2);
            Console.WriteLine(beverage4.getDesciption() 
+ "$" + beverage4.cost());
        }

    }


    
public abstract class Beverage 
    
{
        
public  string description = "Unknown Beverage";

        
public String getDesciption() 
        
{
            
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 HouseBlend : Beverage
    
{
        
public HouseBlend()
        
{
            description 
= "House Blend Coffee";
        }

        
public override double cost() 
        
{
            
return 0.89;
        }

    }


    
public class Mocha : CondimentDecorator 
    
{
        Beverage beverage;
        
public Mocha(Beverage beverage) 
        
{
            
this.beverage = beverage;
        }


        
public override String  getDescription() 
        
{
            
return beverage.getDesciption() + ",Mocha";
        }


        
public override double cost()
        
{
            
return 0.20 + beverage.cost();
        }

    }