// Na MODEL **
public interface ICarro
{
string Modelo { get; }
string Marca { get; }
double Preco { get; }
}
public abstract class CarroDecorator : ICarro
{
ICarro Carro;
public CarroDecorator(ICarro carro)
{
this.Carro = carro;
}
public string Marca
{
get { return this.Carro.Marca; }
}
public string Modelo
{
get { return this.Carro.Modelo; }
}
public double Preco
{
get { return this.Carro.Preco; }
}
}
public class HondaCity : ICarro
{
public string Marca
{
get { return "Honda"; }
}
public string Modelo
{
get { return "New City"; }
}
public double Preco
{
get { return 100000.00; }
}
}
// Na BLL ************************************
public class OfertaEspecial : CarroDecorator
{
public OfertaEspecial(ICarro carro) : base(carro)
{ }
public int PercentualDesconto { get; set; }
public string Oferta { get; set; }
public new double Preco
{
get
{
double preco = base.Preco;
int percentual = 100 - this.PercentualDesconto;
return Math.Round((preco * percentual) / 100, 2);
}
}
}
// Executando na MAIN ******************************
class Program
{
static void Main(string[] args)
{
// Veículo básico
HondaCity carro = new HondaCity();
Console.WriteLine("Honda City preco básico é: {0}", carro.Preco);
Console.WriteLine();
// Oferta especial
OfertaEspecial oferta = new OfertaEspecial(carro);
oferta.PercentualDesconto = 25;
oferta.Oferta = "25% de desconto";
Console.WriteLine("Oferta especial de {1} no {2} na Brazao Veiculos. Preco de oferta: {0}",oferta.Preco,oferta.Oferta,oferta.Marca + " " + oferta.Modelo);
Console.ReadKey();
}
}