Java de los fundamentos al dominio — Lección 4
Usando polimorfismo con herencia e interfaces.
Los artículos escritos en este blog fueron creados con el objetivo de enseñar. Además, la información del artículo puede ser incorrecta, así que tenga cuidado.
Las interfaces y la herencia se pueden utilizar cuando es necesario utilizar varios objetos de la misma manera. El código de llamada es más resistente al cambio si se basa en el rol necesario en lugar de en una clase específica.
interfaz
public interface Damageable {
boolean isAlive();
void takeDamage(int amount);
}
public final class Monster implements Damageable {
private int health = 100;
@Override
public boolean isAlive() {
return health > 0;
}
@Override
public void takeDamage(int amount) {
health = Math.max(0, health - amount);
}
}
El código de ataque es Dañoso, no Monstruo. Incluso si agrega una caja destructible más adelante, se puede manejar con el mismo contrato.
Clases abstractas y herencia.
public abstract class Skill {
private final String name;
protected Skill(String name) {
this.name = name;
}
public String getName() {
return name;
}
public abstract void execute(Damageable target);
}
Las clases abstractas pueden compartir un estado y una implementación comunes y dejar algún comportamiento a sus hijos. La herencia también combina las reglas del padre, por lo que si se profundiza para reutilizar el código simple, el alcance del cambio aumenta.
polimorfismo
List<Damageable> targets = List.of(
new Monster(),
new TrainingDummy()
);
for (Damageable target : targets) {
target.takeDamage(10);
}
Incluso si se realiza la misma llamada, se ejecuta la implementación apropiada para el objeto real. La persona que llama no tiene que enumerar todos los tipos concretos con instancia de.
Las interfaces expresan roles y las clases abstractas proporcionan una base común. Si puede combinar objetos pequeños y componibles, suele ser más sencillo que la herencia.