1
resposta

Escrevi esse código com o padrão Decorator para simular os tipos de coqueteis e seus adicionais. Está OK ??


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

        }
    }
1 resposta

Opa, perceba que vc nem usa o argumento do decorator em nenhuma implementação.. quer dizer que de fato vc não está decorando nada.. a ideia é vc sobreescrever os métodos usando o argumento qeu vc recebe no construtor.

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