Dado un número finito de elementos que difieren en su tipo, ¿es mejor representarlos con enums apilados y constructores enum, o subclonarlos? ¿O hay un mejor enfoque en conjunto?¿Cuál es la mejor práctica de programación de Java: apilar enums y enum constructores, o subclases?
Para darle un poco de contexto, en mi pequeño programa de rol (que irónicamente se supone que es simple), un personaje tiene diferentes tipos de elementos en su inventario. Los artículos difieren según su tipo, uso y efecto.
Por ejemplo, un elemento del inventario es un pergamino de hechizo llamado GREMLIN que ajusta el atributo de utilidad. Otro elemento podría ser una espada llamada Mort que se usa en combate e inflige daño.
En mi código RPG, ahora he intentado dos formas de representar elementos de inventario. Una forma era crear subclases (por ejemplo, InventoryItem -> Spell -> AdjustingAttributes; InventoryItem -> Weapon -> Sword) y crear instancias de cada subclase cuando fuera necesario, y asignar valores como nombres como Gremlin y Mort.
La otra forma fue apilando enums y enum constructores. Por ejemplo, he creado enumeraciones para itemCategory y itemSpellTypes y itemWeaponTypes, y la enumeración InventoryItem era así:
public enum InventoryItem {
GREMLIN(itemType.SPELL, itemSpellTypes.ATTRIBUTE, Attribute.UTILITY),
MORT(itemType.WEAPON, itemWeaponTypes.SWORD, 30);
InventoryItem(itemType typeOfItem, itemSpellTypes spellType, Attribute attAdjusted) {
// snip, enum logic here
}
InventoryItem(itemType typeOfItem, itemWeaponTypes weaponType, int dmg) {
// snip, enum logic here
}
// and so on, for all the permutations of items.
}
¿Hay una mejor práctica de programación Java que estos dos enfoques? O si estas son las únicas formas, ¿cuál de las dos es mejor? Gracias por adelantado por tus sugerencias.
+1 y seleccionando su respuesta debido a la precisión de su respuesta y la útil guía de códigos. – Arvanem