层次考虑

本文关键字:层次 | 更新日期: 2023-09-27 18:15:56

我正在制作一款游戏,它的当前类层次结构为GenerateStats->ClassStats->CreateCharacter。我觉得这可能是在倒退。统计数据没有类统计数据,类统计数据也没有字符。我是在倒退吗?应该是CreateCharacter->ClassStats->GenerateStats吗?感谢您的投入!

层次考虑

这些在类层次结构中都没有意义;类层次表示名词之间的"是一种"关系;你列出的都是动词。这些应该是一个类的方法。该类应为CharacterGenerator

CreateCharacter似乎不应该是ClassStats的子类,但由于我不知道任何类中的实际内容,我无法确定。

在我看来,你没有倒退。继承使更加具体-例如,Apple继承自继承ObjectFruit(实现IEdible!(。而不是相反。当然,这并不完全清楚你的课程流向哪个方向,所以我不确定。只要确保基类是最不具体的,派生类比基类更具体。如果您经常使用private new xxx MyFunction() { //...对方法进行阴影处理,则表明您的做法是错误的。

重新措辞(正如Eric所指出的,使用动词是误导性的(,我相信你的问题是:

CharacterGenerator应该是ClassGenerator的一种,而ClassGenerator本身应该是StatsGenerator的另一种吗?几个注意事项:

  1. 您是否希望从ClassGenerator或StatsGenerator派生其他类型的东西?如果没有,则不需要继承。

  2. 您是否有其他代码希望能够使用任何StatsGenerator或任何ClassGenerator?如果没有使用基类进行操作的代码,则不需要基类。

根据这些名字,我想你真正想要描述的是一种构图关系。看看这个表达是否听起来更像你想要做的:

您有一个CharacterGenerator,它使用ClassGenerator生成角色类,使用StatsGenerator生成字符统计信息。结果是一个包含Class和Stats的Character。

编程时有很多方法可以建模和解决问题;最好选择最简单的方法,继承关系会增加复杂性。如果你打算使用它,你应该有充分的理由引入这种复杂性


此外,正如其他人所指出的,您不一定需要定义一个类来组合行为。在某些情况下,一种或几种方法就足够了。也就是说,选择"太小"(方法很少的小类(而不是"太大"(几个充满各种不同方法的大类(并不一定是坏事。找到正确的平衡很难,所以实验吧。