我有一个关于 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和设计模式的问题。
“内存和性能”差异可以忽略不计,接近于零。
拥有多个具有恒定行为的类总是比拥有一个具有可变行为的“瑞士军刀”类要好。
您的“类型化”解决方案更易于阅读和理解 - 这是需要考虑的最重要的方面。