给定有限数量的种类不同的项目,是用堆叠的枚举和枚举构造函数来表示它们,还是对它们进行子类化更好?还是有更好的方法?
为了给你一些背景信息,在我的小型 RPG 程序中(讽刺的是,这应该很简单),一个角色在他或她的库存中有不同种类的物品。物品因种类、用途和效果而异。
例如,一个物品栏是一个名为 Gremlin 的法术卷轴,它可以调整实用属性。另一件物品可能是一把名为 Mort 的剑,用于战斗并造成伤害。
在我的 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 编程实践?或者如果这些是唯一的方法,那么两者中哪一个更好?提前感谢您的建议。