Parei de Usar IF e ELSE EM TUDO!!
Você! sim Você que usa IF o tempo tudo... sabe que existe uma maneira escalável e melhor de fazer essas coisas.
Uns caras doidones como vc e eu ficarão pensando que as vocês o código fica uma porqueira se passa para outros. kkk só brincando, o desenho de projeto strategy visa em resolver justamente esse problema, os caras pensarão uma forma que se se aplica no código melhora sua capacidade de trabalho em equipe...
Mas o que é Strategy?
E muito comum no java ou c# e pode ser usado em situações em que o seu código terá muitas condições, gerando uma corrente de IFs.
E como faço para aplicar?
Imagine que existe um objeto Funcionario com suas propriedades e uma classe CalcurarSalario que realiza o reajuste salarial deste funcionário de acordo com sua performance durante o ano.
Imagem na Capa.^*
Class CalcurarSalario()
{
public void reajustarSalario(Funcionario funcionario)
{
Double reajuste = null;
if(funcionario.getPerformance().equals(Performance.Negativa))
{
reajuste = 0d;
} else if(funcionario.getPerformance().equals(Performance.Positiva))
{
reajuste = 0d;
}
if(reajuste == null)
{
throw new RuntimeExeption("Tipo de perfonmance não implementada");
}
Double salarioAntigo = funcionario.getSalario();
funcionario.setSalario(salarioAntigo + (salarioAntigo * reajuste));
}
}
Atá aqui vc me fala Funciona esta optimo o codigo..... masss o que acontece sim :
Porém, uma semana após a implementação, vamos supor que o time solicitou a criação de um novo tipo de performance: EXCELENTE.
vc acresentaria um else if ne:
else if(funcionario.getPerformance().equals(Performance.Positiva))....
Claro sendo 3 não tem problema, imagina 200 if ou 50, já tem um problema para debugar e reajustar os %, modificar os nomes
A forma que nosso queridão resolveria seria assim:
enum Performance
{
Negativa,
Positiva,
Excelente,
Podendo acrescentar muitas mas ou tirar....
}
agora vamos por o método dentro de cada....
enum Performance
{
Negativa
{
public Double reajustarSalario()
{
return 0d
}
}
,
Positiva
{
public Double reajustarSalario()
{
return 0.05d
}
}
,
Excelente
{
public Double reajustarSalario()
{
return 0.10d
}
}
public abstract Double retornaReajusteSalario();
}
Agora nosso codigo ficaria assim:
Class CalcurarSalario()
{
public void reajustarSalario(Funcionario funcionario)
{
Double reajuste = funcionario.getPerformance().retornaReajusteSalario();
Double salarioAntigo = funcionario.getSalario();
funcionario.setSalario(salarioAntigo + (salarioAntigo * reajuste));
}
}
De essa forma podemos acrescentar muitos campos e modificação que alterará a class mas a interface, eliminando fila de If.
Podendo ser melhor trabalhado por o seguinte programador a vir com só olhar o codigo fica mais limpo.
Espero que deixe de fazer essas fileiras de iffffff, Muito obrigado pela tua leitura! Desculpa as faltas de ortografia sou Argentino.