2010-08-19 80 views
0

这是一个后续到我这里问的问题是:类层次结构 - 在RPG游戏,类重叠(VB.Net)数据设计

Class Hierarchy - Data design in an RPG Game (VB.Net)

我明白在后回答上面,这顺便说一句,绝对是惊人的。这是关于实现与类的接口。但是,如果一个班级需要与另一个班级共享功能呢?

是的,该类可以一个接口。但是,让我们使用这个示例定义。

的项目可用于或EQUIPPED
设备齐全的ITEM可以是铠装或武器
A中使用ITEM任医治队,演员MAGIC,或者损坏对方球队。
某些装备项目可以作为使用项目。
某些装备物品可以施放魔法。

或者,换言之:
一种可装备项目可以在其典型的屏蔽或武器的使用之外执行动作。但并不是所有的物品都可以作​​为护身符或武器。

我的意思是,我可以创建一个实现IWeapon,IShield,IMagic,IUseableItem等的类。但是,当调用这些接口时,应该有比返回NULL更好的方法。

回答

1

但是,当调用这些接口时,应该有比返回NULL更好的方法。

它被称为“没有在不支持它们的对象上实现它们”。或者我会想到。

一个选项是具有IEquippable和IUsable,并且任何可以配备和使用的项目都可以实现这两个选项,而其他项目仅实现适用的接口。

+0

但是我不需要三班吗?一个实现/继承IEquippable的类,一个实现/继承IUsable的类,一个继承两者以实现两者?或者让我们说一个班级使用魔法,可装备和可用? – 2010-08-19 04:22:18

+0

@Jeffrey:是的,您需要为不同类别的对象使用不同的类。这大致是面向对象设计的概念。如果你打算把所有东西都放到一个“Item”类中,那么首先定义这些接口就没有意义了。 – 2010-08-19 04:27:35

+0

好的,谢谢。 :) – 2010-08-19 04:31:13

0

说实话,我会选择在这里使用一个Item类。你将有很多功能的排列,并且最终将不得不手动查询接口存在或对象类型。所以试图在设计时修正这些排列似乎是错误的做法。

+0

我认为做的是让一个基本对象返回值如果一个子对象被实例化则为TRUE,如果不是则返回false。 – 2010-08-19 22:42:30

+0

如果在尝试使用之前必须检查每一个功能块它的代码会很快变得丑陋。如果功能不可用,最好有一个允许您尝试使用安全错误处理功能的系统。 – Kylotan 2010-08-20 11:24:04