Reduzindo “ifs” com polimorfismo

Umas das maneiras de evitar o uso de “if” em excesso é utilizando Polimorfismo, onde a própria classe será responsável pela execução da ação, como por exemplo em uma calculadora, a operação de adição deve saber que é uma soma dos valores e não um método que valida “se adição some os valores”.
Segue abaixo o exemplo de uma calculadora que possui um método calcular que apenas é passado os 2 valores de entrada e o tipo da operação que retorna o valor calculado.

Calculadora.java

public class Calculadora {

    public static BigDecimal calcular(BigDecimal valor1, BigDecimal valor2, Operacao operacao) {   
       return operacao.calcular(valor1, valor2);
    }
}

A Classe calculadora apenas possui um método calcular que recebe 2 valores e uma operação.

Operacao.java

public enum Operacao {

    ADICAO("+") {
       @Override
       BigDecimal calcular(BigDecimal valor1, BigDecimal valor2) {
           return valor1.add(valor2);
       }
    },
    SUBTRACAO("-") {
        @Override
        BigDecimal calcular(BigDecimal valor1, BigDecimal valor2) {
            return valor1.subtract(valor2);
       }
    },
    MULTIPLICACAO("*") {
        @Override
        BigDecimal calcular(BigDecimal valor1, BigDecimal valor2) {
            return valor1.multiply(valor2);
        }
    },
    DIVISAO("/") {
       @Override
       BigDecimal calcular(BigDecimal valor1, BigDecimal valor2) {
           return valor1.divide(valor2, 2 , RoundingMode.HALF_UP);
       }
    };

    private final String simbolo;

    Operacao(String simbolo) {
        this.simbolo = simbolo;
    }

    abstract BigDecimal calcular(BigDecimal valor1, BigDecimal valor2);

    public String getSimbolo() {
        return simbolo;
    }
}

Adicionando o método abstrato calcular, todas operações são obrigadas a implementar seu próprio cálculo.

Anúncios

Um comentário sobre “Reduzindo “ifs” com polimorfismo

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair /  Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair /  Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair /  Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair /  Alterar )

w

Conectando a %s