设计库存 class

Design an inventory class

我正在重写应用程序的基础架构,我遇到了一个有趣的情况。

我正在写一个 class Bag:class 有一个 属性 Items 可以容纳 Item 的集合的:

Weapon : Item
Armor : Item
Ammunition : Item
Bag : Item  (because a player may want to put a bag inside of another one)

到这里一切都很好,问题是...

在前端,虽然对相同 ArmorWeapon 的副本使用不同的用户控件是可以的,但对于 Ammunition(如箭头)或Item(像面包)。

一个玩家可以有 50 个箭头,这些箭头都需要表示为单个用户控件(堆栈)。做到这一点的简单方法是将 Quantity 属性 添加到 Item class 并将其隐藏在 ArmorWeaponBag classes,但这似乎不对,不仅因为我必须对其他派生的 classes 隐藏它,而且最终,世界可以以不同的数量存在,所以用 属性 来制作 class 似乎是不对的。

似乎正确的方法是收集 Item 的那些可以堆叠的物品(类似于 Stack(Of Item)。所以,简而言之:我的 Bagclass不仅要能装物品的集合,还要能装物品的集合。

比如这是魔兽世界的截图:

如您所见,背包既可以容纳单个物品,也可以容纳成堆的物品。

我怎样才能以不错的方式做到这一点?

我能想到几个解决方案

  1. 设置数量和最大数量 - 然后单数项的 MaxQuantity 为 1
  2. 制作一个 StackableItem class 弹药等继承自,然后您可以在其中包含一个数量,如果您愿意,它仍然允许您在不同的空间携带多个相同的物品到。您的红色(臂章?)
  3. 屏幕截图中显示了一个示例