Учитывая конечное число элементов, которые различаются по виду, лучше ли представлять их с помощью сложенных перечислений и конструкторов перечислений или создавать их подклассы? Или вообще есть лучший подход?
Чтобы дать вам некоторый контекст, в моей маленькой RPG-программе (которая, по иронии судьбы, должна быть простой), персонаж имеет различные виды предметов в своем инвентаре. Предметы различаются в зависимости от их типа, использования и эффекта.
Например, один предмет инвентаря - это свиток заклинаний под названием Gremlin, который регулирует атрибут Utility. Другим предметом может быть меч по имени Морт, который используется в бою и наносит урон.
В моем коде RPG я попробовал два способа представления предметов инвентаря. Одним из способов было создание подклассов (например, InventoryItem -> Spell -> AdjustingAttributes; InventoryItem -> Weapon -> Sword) и создание экземпляров каждого подкласса, когда это необходимо, и назначение таких значений, как имена, такие как Gremlin и Mort.
Другим способом было сложение перечислений и конструкторов перечислений. Например, я создал перечисления для itemCategory и itemSpellTypes и itemWeaponTypes, а перечисление InventoryItem было таким:
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.
}
Есть ли лучшая практика программирования на Java, чем эти два подхода? Или, если это единственные способы, какой из двух лучше? Заранее спасибо за ваши предложения.