使用继承和多态性解决常见的博弈问题
我有两个班级;让我们称它们为食人魔和巫师。(所有字段都是公共的,以使示例更易于输入。
public class Ogre
{
int weight;
int height;
int axeLength;
}
public class Wizard
{
int age;
int IQ;
int height;
}
在每个类中,我都可以创建一个名为battle()的方法,该方法将决定如果食人魔遇到食人魔或巫师遇到巫师,谁将获胜。下面是一个示例。如果食人魔遇到食人魔,那么体重较重的食人魔获胜。但是,如果重量相同,则斧头较长的那个获胜。
public Ogre battle(Ogre o)
{
if (this.height > o.height) return this;
else if (this.height < o.height) return o;
else if (this.axeLength > o.axeLength) return this;
else if (this.axeLength < o.axeLength) return o;
else return this; // default case
}
我们可以为巫师制作类似的方法。
但是,如果巫师遇到食人魔呢?我们当然可以为此制定一种方法,比较,比如说,只是高度。
public Wizard battle(Ogre o)
{
if (this.height > o.height) return this;
else if (this.height < o.height) return o;
else return this;
}
我们会为食人魔做一个类似的,遇到巫师。但是,如果我们必须向程序添加更多字符类型,事情就会失控。
这就是我陷入困境的地方。一个明显的解决方案是创建一个具有共同特征的 Character 类。食人魔和巫师从角色那里继承并扩展它以包括定义每个角色的其他特征。
public class Character
{
int height;
public Character battle(Character c)
{
if (this.height > c.height) return this;
else if (this.height < c.height) return c;
else return this;
}
}
有没有更好的方法来组织课程?我已经研究了策略模式和调解员模式,但我不确定它们中的任何一个(如果有的话)如何在这里提供帮助。我的目标是达到某种常见的战斗方法,这样,如果食人魔遇到食人魔,它就会使用食人魔与食人魔的战斗,但是如果食人魔遇到巫师,它就会使用更通用的巫师。此外,如果相遇的角色没有共同的特征怎么办?我们如何决定谁能赢得一场战斗?
编辑:很多很棒的回应!我需要消化它们,并找出哪一个最适合我的情况。