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