使用IF还是多态?

问题描述 投票:0回答:1

我有一个关于 Java 的问题。我使用 Java 还不到一年,我开始对设计模式产生有趣的疑问:

例如,我想用面向对象(OO)原则改进我的代码,使其更简洁,但这提出了一个问题:我不会增加处理时间吗?

在下面的代码中:

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

在这段代码中,如果我使用多态性,我的代码肯定会变得更加优雅。但是,如果我使用 if 语句,不是会具有更好的性能吗,因为它不会创建内存指针之类的?

希望能澄清一个关于Java和设计模式的问题。

java oop if-statement design-patterns polymorphism
1个回答
0
投票

“内存和性能”差异可以忽略不计,接近于零。

拥有多个具有恒定行为的类总是比拥有一个具有可变行为的“瑞士军刀”类要好。

您的“类型化”解决方案更易于阅读和理解 - 这是需要考虑的最重要的方面。

© www.soinside.com 2019 - 2024. All rights reserved.