Étant donné un nombre fini d'éléments qui diffèrent en nature, est-il préférable de les représenter avec des énumérateurs empilés et des constructeurs d'énumération, ou de les sous-classer? Ou y a-t-il une meilleure approche?Quelle est la meilleure pratique de programmation Java: empiler des enums et constructeurs enum, ou sous-classes?
Pour vous donner un contexte, dans mon petit programme RPG (qui est censé être simple ironie du sort), un personnage a différentes sortes d'objets dans son inventaire. Les éléments diffèrent en fonction de leur type, de leur utilisation et de leur effet.
Par exemple, un élément de l'inventaire est un rouleau de sort appelé Gremlin qui ajuste l'attribut Utility. Un autre objet pourrait être une épée appelée Mort qui est utilisée en combat et inflige des dégâts.
Dans mon code RPG, j'ai maintenant essayé deux façons de représenter les éléments de l'inventaire. Une façon était de sous-classer (par exemple, InventoryItem -> Spell -> AjusterAttributs, InventoryItem -> Weapon -> Epée) et d'instancier chaque sous-classe si nécessaire, et d'assigner des valeurs telles que Gremlin et Mort.
L'autre façon consistait à empiler des énumérateurs et des constructeurs d'énumération. Par exemple, j'ai créé énumérations pour itemCategory et itemSpellTypes et itemWeaponTypes et le ENUM InventoryItem était comme ça:
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.
}
est-il une meilleure pratique de programmation Java que ces deux approches? Ou si ce sont les seuls moyens, lequel des deux est le meilleur? Merci en avance pour vos suggestions.
+1 et en sélectionnant votre réponse en raison de l'exactitude de votre réponse et du guide du code utile. – Arvanem