Различные способы нанесения ущерба - это поведение, которое предполагает использование шаблона проектирования Стратегии. Например, иметь интерфейс Damage
, такой как:
public interface Damage {
public void doDamage();
}
и несколько реализаций, таких как:
public class SimpleDamage implements Damage {
public void doDamage() {
System.out.println("simple damage");
}
}
public class MagicDamage implements Damage {
public void doDamage() {
System.out.println("magic damage");
}
}
Так что тогда нужен только один тип Hero
, такой как:
public class Hero implements Damage {
private final Damage damage;
public Hero(Damage damage) {
this.damage = damage;
}
public void doDamage() {
damage.doDamage();
}
}
Реализации Damage
также могут использовать шаблон проектирования Decorator. Например, урон героя может включать несколько способов нанесения урона:
public class MagicDamage implements Damage {
private final Damage additionalDamage;
public MagicDamage(Damage additionalDamage) {
this.additionalDamage = additionalDamage;
}
public void doDamage() {
if (additionalDamage != null) {
additionalDamage.doDamage();
}
System.out.println("magic damage");
}
}
...
Hero hero = new Hero(new MagicDamage(new SimpleDamage());