Saltar al contenido principal

Replace Conditional with Polymorphism

  • Problema: Condicional que elige comportamiento según el tipo de objeto.
  • Solución: Crear subclases para cada caso y usar métodos polimórficos.
  • Code Smells que resuelve: Switch Statements Excesivos, Envidia de Características
class Bird {
enum Type { EUROPEAN, AFRICAN, NORWEGIAN_BLUE }

private Type type;
private boolean isNailed;

public double getAirspeedVelocity() {
switch (type) {
case EUROPEAN:
return 35;
case AFRICAN:
return 40;
case NORWEGIAN_BLUE:
return isNailed ? 0 : 45;
default:
throw new RuntimeException("Unknown bird type");
}
}
}
abstract class Bird {
public abstract double getAirspeedVelocity();
}

class EuropeanBird extends Bird {
@Override
public double getAirspeedVelocity() {
return 35;
}
}

class AfricanBird extends Bird {
@Override
public double getAirspeedVelocity() {
return 40;
}
}

class NorwegianBlueBird extends Bird {
private boolean isNailed;

public NorwegianBlueBird(boolean isNailed) {
this.isNailed = isNailed;
}

@Override
public double getAirspeedVelocity() {
return isNailed ? 0 : 45;
}
}