1
resposta

gostaria de saber se essa implementação de solicitação de emprestimo está ok para o Cain of Responsability

 public interface IRequisicao
    {
        string Nome { get; set; }
        void Responde(Pedido ped);
        IRequisicao Proximo { get; set; }

    }

 public class Pedido
    {

        public string Cliente { get; set; }
        public decimal ValorEmprestimo { get; set; }

    }

  public class Caixa : IRequisicao
    {
        public string Nome { get; set; }
        public IRequisicao Proximo { get; set; }

        public void Responde(Pedido ped)
        {

            Console.WriteLine("\n----\nR$ {0} Pedido requerido por {1}", ped.ValorEmprestimo, ped.Cliente);

            if (ped.ValorEmprestimo < 1000)
            {
                Console.WriteLine("R$ {0} aprovado para {1} - Aprovado por {2} ", ped.ValorEmprestimo, ped.Cliente, this.Nome);
            }
            else if (Proximo != null)
            {
                Proximo.Responde(ped);
            }

        }

    }

  public class Gerente : IRequisicao
    {
        public string Nome { get; set; }
        public IRequisicao Proximo { get; set; }

        public void Responde(Pedido ped)
        {

            if (ped.ValorEmprestimo < 10000)
            {
                Console.WriteLine("R$ {0} aprovado para {1} - Aprovado por {2} ", ped.ValorEmprestimo, ped.Cliente, this.Nome);
            }
            else if (Proximo != null)
            {
                Proximo.Responde(ped);
            }

        }

    }

  public class EmprestimoNegado : IRequisicao
    {
        public string Nome { get; set; }

        public IRequisicao Proximo { get; set; }

        public void Responde(Pedido ped)
        {
            Console.WriteLine("Queira descupar.Pedido de empréstimo negado.");
        }

    }

   public class AprovadorDeEmprestimo
    {

        public void VerificaAprovacaoDeEmprestimo(Pedido pedio)
        {

            IRequisicao r1 = new Caixa();
            IRequisicao r2 = new Gerente();
            IRequisicao r3 = new EmprestimoNegado();

            r1.Nome = "Carlos, Caixa";
            r2.Nome = "Mauricio, Gerente";

            r1.Proximo = r2;
            r2.Proximo = r3;

            r1.Responde(pedio);

        }

    }

 class Program
    {
        static void Main(string[] args)
        {

            AprovadorDeEmprestimo aprovador = new AprovadorDeEmprestimo();

            Pedido ped1 = new Pedido() { Cliente = "Manoel", ValorEmprestimo = 300.50M };
            Pedido ped2 = new Pedido() { Cliente = "Rita de Cassia", ValorEmprestimo = 800.00M };
            Pedido ped3 = new Pedido() { Cliente = "Humberto", ValorEmprestimo = 500.00M };
            Pedido ped4 = new Pedido() { Cliente = "Jose Marcos", ValorEmprestimo = 20000.00M };
            Pedido ped5 = new Pedido() { Cliente = "Ricardo Fonseca", ValorEmprestimo = 5000.00M };

            aprovador.VerificaAprovacaoDeEmprestimo(ped1);
            aprovador.VerificaAprovacaoDeEmprestimo(ped2);
            aprovador.VerificaAprovacaoDeEmprestimo(ped3);
            aprovador.VerificaAprovacaoDeEmprestimo(ped4);
            aprovador.VerificaAprovacaoDeEmprestimo(ped5);

            Console.ReadKey();


        }
    }
1 resposta

opa, eu achei bem ok! mandou bem!