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