Ainda não tem acesso? Estude com a gente! Matricule-se
Ainda não tem acesso? Estude com a gente! Matricule-se

Solucionado (ver solução)

Dúvida ao construir a cadeia

Utilizando o construtor ao invés do Setter eu fiz a seguinte implementação:

    public class GeradorDeResposta
    {
        public void geraResposta(Conta conta, Requisicao requisicao)
        {
            Resposta resposta = new RespondeCsv(
                new RespondeXml(
                    new RespondePorcento(
                        new SemResposta()
                    )
                )
            );

            resposta.retornaConta(conta, requisicao);
        }
    }

public class RespondeCsv : Resposta
    {
        public Resposta Proxima { get; set; }

        public RespondeCsv(Resposta proxima)
        {
            this.Proxima = proxima;
        }

        public void retornaConta(Conta conta, Requisicao requisicao)
        {
            if (requisicao.Formato == Formato.CSV)
            {
                Console.WriteLine(conta.NomeDoTitular + "," + conta.Saldo);
            }
            Proxima.retornaConta(conta, requisicao);
        }
    }


public class RespondeXml : Resposta
    {
        public Resposta Proxima { get; set; }

        public RespondeXml(Resposta proxima)
        {
            this.Proxima = proxima;
        }

        public void retornaConta(Conta conta, Requisicao requisicao)
        {
            if (requisicao.Formato == Formato.XML)
            {
                Console.WriteLine("<Conta><Titular>" + conta.NomeDoTitular + "</Titular><Saldo>" + conta.Saldo + "</Saldo></Conta>");
            }
            Proxima.retornaConta(conta, requisicao);
        }
}


public class RespondePorcento : Resposta
    {
        public Resposta Proxima { get; set;}

        public RespondePorcento(Resposta proxima)
        {
            this.Proxima = proxima;
        }

        public void retornaConta(Conta conta, Requisicao requisicao)
        {
            if (requisicao.Formato == Formato.PORCENTO)
            {
                Console.WriteLine(conta.NomeDoTitular + "%" + conta.Saldo);
            }

            Proxima.retornaConta(conta, requisicao);
        }
    }

   public class SemResposta : Resposta
    {

        public void retornaConta(Conta conta, Requisicao requisicao)
        {
            return;
        }
    }

Para "encerrar a corrente" eu não utilizei o construtor na classe SemResposta. Funcionou, porém eu gostaria de saber se essa é a melhor solução.

2 respostas
solução

Oi Bruno,

A sua implementação ficou até próxima de um decorator :). A implementação com o construtor ficou legal sim :). Mandou bem!

Obrigado Alberto!

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