设计库存类

时间:2015-01-29 08:04:49

标签: c# vb.net oop collections

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

我正在写一个课程Bag:该课程有一个属性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(如箭头)或{{ 1}}(像面包一样)。

玩家可以拥有50个箭头,并且那些需要全部表示为单个用户控件(堆栈)。这样做的简单方法是向Item类添加Quantity属性,并将其隐藏在ItemArmorWeapon类中,但是看起来不对,不仅因为我必须将它隐藏在其他派生类中,而且最终,世界上任何对象都可以以不同的数量存在,所以它看起来并不正确用这样的属性创建一个类。

似乎正确的方法是为那些可以叠加的项目设置Bag的集合(类似于Item。所以,简而言之:我的{ {1}}类不仅必须能够保存项目集合,还必须能够保存项目集合的集合。

例如,这是“魔兽世界”的截图:

如您所见,背包可以容纳单个物品和一叠物品。

我怎么能用漂亮的方式做到这一点?

1 个答案:

答案 0 :(得分:5)

我能想到几个解决方案

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