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)

Como fica a classe ProcessadorDeRequisicoes após essa implementação?

Como fica a classe ProcessadorDeRequisicoes após essa implementação?

5 respostas

Como está o seu atualmente?

using System;

namespace CursoDesignPatterns.ChainOfResponsability.RequisicoesWeb { public class ProcessadorDeRequisicoes { public void Requisitar(Formato formato) { //Conta conta = new Conta("Veloso", 1000.0);

//Resposta r1 = new RespostaEmXml(null); //Resposta r2 = new RespostaEmCsv(); //Resposta r3 = new RespostaEmPorcento(); //Resposta r4 = new SemResposta();

//r1.Proximo = r2; //r2.Proximo = r3; //r3.Proximo = r4;

//Requisicao req = new Requisicao(formato);

//r1.Proximo.Responde(req, conta); } } }

/* Desconto d1 = new DescontoMaisDeCincoItens(); Desconto d2 = new DescontoValorMaiorQuinhentosReais(); Desconto d3 = new DescontoPorVendaCasada(); Desconto d4 = new SemDesconto();

d1.Proximo = d2; d2.Proximo = d3; d3.Proximo = d4;

return d1.Proximo.Desconta(orcamento); */

Aparentemente, ta tudo comentado....

Posta com a tag de código pra melhorar o visual

Justamente, eu não sei qual o conteúdo dessa classe. Tanto no vídeo quanto no exercício eu não consegui encontrar o código dela, esses trechos comentados foram minhas tentativas de fazer ela funcionar, mas não deu certo.

Vi que você colocou no seu Github o código desse curso, vou tentar fazer de novo e usá-lo como referência.

Valeu.

solução

A minha ficou assim, diferente do exercício pois achei melhor implementar com o uso de listas para facilitar a incrementação de outros métodos posteriormente.

    public class CalculadorDeDescontos
    {

        public IList<Desconto> ListaDescontos { get; private set; }

        public double Calcula(Orcamento orcamento)
        {

            ListaDescontos = new List<Desconto>();

            //-- Adicionar os tipos de descontos existentes a lista para serem encadeados
            this.ListaDescontos.Add(new DescontoPorCincoItens() );
            this.ListaDescontos.Add(new DescontoPorMaisDeQuinhentosReais() );
            this.ListaDescontos.Add(new DescontoPorVendaCasada());            

            this.ListaDescontos.Add(new SemDesconto() ); //-- Importante! Deve ser o último!

            //-- Definir a cadeia de execução dos descontos.
            for ( int contador = 0; contador < ListaDescontos.Count; contador++)
            {
                //-- Verificar se não é último desconto ( Sem desconto )
                if ( contador + 1 < ListaDescontos.Count) 
                {
                    //-- Definir que o próximo item da lista é o desconto a ser executado
                    ListaDescontos[contador].Proximo = ListaDescontos[contador + 1];
                }
            }

            //-- Executar o primeiro desconto e os demais serão executados em cadeia
            return ListaDescontos[0].Desconta(orcamento);
        }
    }

Para modificar conforme esse exercício ficaria assim:


    public class CalculadorDeDescontos
    {

        public double Calcula(Orcamento orcamento)
        {

            //-- Adicionar os tipos de descontos existentes a lista para serem encadeados
            Desconto primeiroDesconto = new DescontoPorCincoItens(
                                                                    new DescontoPorMaisDeQuinhentosReais( 
                                                                    new DescontoPorVendaCasada(
                                                                    new SemDesconto() ) ) ); //-- Importante! Deve ser o último!

            //-- Executar o primeiro desconto e os demais serão executados em cadeia
            return primeiroDesconto.Desconta(orcamento);
        }
    }

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