1
resposta

Fiz essa implementação usando Decorator em camadas. BLL e MODEL. Gostaria de saber se está ok ??

// 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();

        }

    }
1 resposta

A classe HondaCity nao deveria existir.. ela seria uma instancia de um carro, nao uma definicao. Percebe que nela vc devolve valores estáticos em vez de usar os atributos.. bastava ter um construtor passando as informações...

Em relação a ofertaespecial acho que ficou ok sim.

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software