Vin*_*ves 2 java oop polymorphism design-patterns if-statement
我有一个关于 Java 的问题。我使用 Java 还不到一年,我开始对设计模式产生有趣的疑问:
\n例如,我想用面向对象(OO)原则改进我的代码,使其更清晰,但它提出了一个问题:我不会增加处理时间吗?
\n在下面的代码中:
\nimport java.util.ArrayList;\nimport java.util.List;\n\n\npublic class EscritorioContabilidade {\n \n //metodo para recuperar a informacao salarial utilizando os IF\xc2\xb4s da pior maneira....rsrsr\n public double getSalarioFuncionario(String tipoFuncionario){\n double salario = -1;\n if("gerente".equals(tipoFuncionario)){\n salario = 1000;\n }\n else if("balconista".equals(tipoFuncionario)){\n salario = 900;\n }\n else if("faixineiro".equals(tipoFuncionario)){\n salario = 550;\n }\n return salario;\n }\n \n //metodo para recuperar a informacao salarial utilizando os IF\xc2\xb4s. Nao melhoramos muito\n public double getSalarioFuncionario(Object funcionario){\n double salario = -1;\n if(funcionario instanceof Gerente){\n salario = 1000;\n }\n else if(funcionario instanceof Balconista){\n salario = 900;\n }\n else if(funcionario instanceof Faixineiro){\n salario = 550;\n }\n return salario;\n }\n \n //metodo para recuperar a informacao salarial utilizando polimorfismo. Agora sim!\n public double getSalarioFuncionario(Funcionario funcionario){\n return funcionario.informarSalario();\n }\n \n public static void main(String [] asdf){\n EscritorioContabilidade escritorioContabilidade = new EscritorioContabilidade();\n double folhaPagamento = 0;\n \n List<Funcionario> listaFuncionario = new ArrayList<Funcionario>();\n \n //adicionando os funcionarios \n listaFuncionar\nRun Code Online (Sandbox Code Playgroud)\nio.add(new Gerente());\n listaFuncionario.add(new Balconista());\n listaFuncionario.add(new Faixineiro());\n \n //usando o polimorfismo para determinar a folha de pagamento\n for (Funcionario funcionario : listaFuncionario) {\n folhaPagamento += escritorioContabilidade.getSalarioFuncionario(funcionario);\n }\n System.out.println("folha de pagamento: "+folhaPagamento);\n \n //agora vamos usar um dos metodos que utilizam os IFs e voces podem ver a clareza em ambos os trechos de codigo\n folhaPagamento = 0;\n folhaPagamento += escritorioContabilidade.getSalarioFuncionario("gerente");\n folhaPagamento += escritorioContabilidade.getSalarioFuncionario("balconista");\n folhaPagamento += escritorioContabilidade.getSalarioFuncionario("faixineiro");\n \n System.out.println("folha de pagamento: "+folhaPagamento);\n }\n}\n\n\npublic abstract class Funcionario {\n public abstract double informarSalario();\n}\n\n\npublic class Gerente extends Funcionario {\n\n @Override\n public double informarSalario() {\n return 1000;\n }\n\n}\n\nclass Balconista extends Funcionario{\n\n @Override\n public double informarSalario() {\n return 900;\n }\n \n}\n\nclass Faixineiro extends Funcionario{\n\n @Override\n public double informarSalario() {\n return 550;\n }\n \n}\nRun Code Online (Sandbox Code Playgroud)\n在这段代码中,如果我使用多态性,我的代码肯定会变得更加优雅。但是,如果我使用 if 语句,它不会有更好的性能吗,因为它不会创建内存指针等?
\n我希望澄清一个关于Java和设计模式的问题。
\n“内存和性能”差异可以忽略不计,接近于零。
拥有多个具有恒定行为的类总是比拥有一个具有可变行为的“瑞士军刀”类要好。
您的“类型化”解决方案更易于阅读、理解、测试和扩展——这是需要考虑的最重要的方面。