I have a question about Java. I've been working with Java for less than a year, and I'm starting to have interesting doubts about design patterns:
For example, I want to improve my code with Object-Oriented (OO) principles to make it cleaner, but it raised a question: won't I increase the processing time?
In the code below:
import java.util.ArrayList;
import java.util.List;
public class EscritorioContabilidade {
//metodo para recuperar a informacao salarial utilizando os IF´s da pior maneira....rsrsr
public double getSalarioFuncionario(String tipoFuncionario){
double salario = -1;
if("gerente".equals(tipoFuncionario)){
salario = 1000;
}
else if("balconista".equals(tipoFuncionario)){
salario = 900;
}
else if("faixineiro".equals(tipoFuncionario)){
salario = 550;
}
return salario;
}
//metodo para recuperar a informacao salarial utilizando os IF´s. Nao melhoramos muito
public double getSalarioFuncionario(Object funcionario){
double salario = -1;
if(funcionario instanceof Gerente){
salario = 1000;
}
else if(funcionario instanceof Balconista){
salario = 900;
}
else if(funcionario instanceof Faixineiro){
salario = 550;
}
return salario;
}
//metodo para recuperar a informacao salarial utilizando polimorfismo. Agora sim!
public double getSalarioFuncionario(Funcionario funcionario){
return funcionario.informarSalario();
}
public static void main(String [] asdf){
EscritorioContabilidade escritorioContabilidade = new EscritorioContabilidade();
double folhaPagamento = 0;
List<Funcionario> listaFuncionario = new ArrayList<Funcionario>();
//adicionando os funcionarios
listaFuncionar
io.add(new Gerente());
listaFuncionario.add(new Balconista());
listaFuncionario.add(new Faixineiro());
//usando o polimorfismo para determinar a folha de pagamento
for (Funcionario funcionario : listaFuncionario) {
folhaPagamento += escritorioContabilidade.getSalarioFuncionario(funcionario);
}
System.out.println("folha de pagamento: "+folhaPagamento);
//agora vamos usar um dos metodos que utilizam os IFs e voces podem ver a clareza em ambos os trechos de codigo
folhaPagamento = 0;
folhaPagamento += escritorioContabilidade.getSalarioFuncionario("gerente");
folhaPagamento += escritorioContabilidade.getSalarioFuncionario("balconista");
folhaPagamento += escritorioContabilidade.getSalarioFuncionario("faixineiro");
System.out.println("folha de pagamento: "+folhaPagamento);
}
}
public abstract class Funcionario {
public abstract double informarSalario();
}
public class Gerente extends Funcionario {
@Override
public double informarSalario() {
return 1000;
}
}
class Balconista extends Funcionario{
@Override
public double informarSalario() {
return 900;
}
}
class Faixineiro extends Funcionario{
@Override
public double informarSalario() {
return 550;
}
}
In this code, if I use polymorphism, my code certainly becomes more elegant. However, if I use if statements, wouldn't it have better performance because it doesn't create memory pointers and such?
I hope to clarify a question about Java and design patterns.
The "memory and performance" differences are negligible, approaching zero.
You're always better to have several classes that each have constant behaviour than one "Swiss army knife" class that has variable behaviour.
Your "typed" solution is easier to read, understand, test and extend - that's the most important aspect to consider.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With