public abstract class Coquetel
{
private string nome = string.Empty;
private double preco = 0.0;
public string Nome
{
get { return nome; }
set { nome = value; }
}
public double Preco
{
get { return preco; }
set { preco = value; }
}
}
public abstract class CoquetelDecorator : Coquetel
{
Coquetel coquetel;
public CoquetelDecorator(Coquetel umCoquetel)
{
coquetel = umCoquetel;
}
public string GetNome()
{
return coquetel.Nome + " + " + Nome;
}
public double GetPreco()
{
return coquetel.Preco + Preco;
}
}
public class Acucar : CoquetelDecorator
{
public Acucar(Coquetel umCoquetel) : base(umCoquetel)
{
Nome = "Acucar";
Preco = 2.65;
}
}
public class Limao : CoquetelDecorator
{
public Limao(Coquetel umCoquetel) : base(umCoquetel)
{
Nome = "Limao";
Preco = 0.55;
}
}
public class Refrigerante : CoquetelDecorator
{
public Refrigerante(Coquetel umCoquetel) : base(umCoquetel)
{
Nome = "Refrigerante";
Preco = 1.0;
}
}
public class Suco : CoquetelDecorator
{
public Suco(Coquetel umCoquetel) : base(umCoquetel)
{
Nome = "Suco";
Preco = 2.20;
}
}
public class Cachaca : Coquetel
{
public Cachaca()
{
Nome = "Cachaça";
Preco = 1.50;
}
}
public class Run : Coquetel
{
public Run()
{
Nome = "Run";
Preco = 3.30;
}
}
public class Vodka : Coquetel
{
public Vodka()
{
Nome = "Vodka";
Preco = 2.30;
}
}
class Program
{
static void Main(string[] args)
{
Coquetel meuCoquetel = new Cachaca();
Console.WriteLine("Coquetel de: " + meuCoquetel.Nome + "\tValor: " + meuCoquetel.Preco);
meuCoquetel = new Refrigerante(meuCoquetel);
Console.WriteLine("Coquetel de: " + meuCoquetel.Nome + "\tValor: " + meuCoquetel.Preco);
Console.ReadKey();
}
}