public abstract class Carro
{
private double preco = -1;
private string descricao = "Carro Abstrato";
public virtual double Preco
{
get { return preco; }
}
public virtual string Descricao
{
get { return descricao; }
}
}
public abstract class DecoratorCarro : Carro
{
private double preco = -1;
private string descricao = "Decorador abstrato de Carro";
public override double Preco
{
get
{
return preco;
}
}
public override string Descricao
{
get
{
return descricao;
}
}
}
public class FerrariSpider : Carro
{
private double preco = 255000.99;
private string descricao = "Ferrari Spider";
public override double Preco
{
get
{
return preco;
}
}
public override string Descricao
{
get
{
return descricao;
}
}
}
public class FerrariCouro : DecoratorCarro
{
private double preco = 4250.25;
private string descricao = " Bancos de Couro";
Carro Carro;
public FerrariCouro(Carro carro)
{
this.Carro = carro;
}
public override double Preco
{
get
{
return this.Carro.Preco + this.preco;
}
}
public override string Descricao
{
get
{
return this.Carro.Descricao + this.descricao;
}
}
}
public class FerrariTurbo : DecoratorCarro
{
private double preco = 9500.50;
private string descricao = " Motor Turbo";
Carro Carro;
public FerrariTurbo(Carro carro)
{
this.Carro = carro;
}
public override double Preco
{
get
{
return this.Carro.Preco + this.preco;
}
}
public override string Descricao
{
get
{
return this.Carro.Descricao + this.descricao;
}
}
}
class Program
{
static void Main(string[] args)
{
//criar um carro
Console.WriteLine(" --------------Ferrari Padrão-----------------------");
Carro carro = new FerrariSpider();
Console.WriteLine("Descricao --> " + carro.Descricao.TrimEnd(' ', ','));
Console.WriteLine("Preco -->" + carro.Preco.ToString());
Console.ReadLine();
Console.WriteLine(" --------------Ferrari Decorada---------------------");
//decora o carro com banco de couro
carro = new FerrariCouro(carro);
//decora o carro com motor turbo
carro = new FerrariTurbo(carro);
Console.WriteLine("Descricao --> " + carro.Descricao.TrimEnd(' ', ','));
Console.WriteLine("Preco -->" + carro.Preco.ToString());
Console.ReadLine();
}
}