我正处于游戏开发的早期阶段。这是某种回合制游戏,例如战锤或魔兽争霸。有些生物可以再生它们所受的伤害,为了表示这一点,我有一个这样的界面
public interface Regenerative {
void regenerates();
}
所以再生的生物是
public class SomeMonster() extends BaseCreature implements Regeneative{
//Code
private int hitPoints;
public void regenerates(){
hitPoints = hitPoints + regenerateValue;
}
}
我面临的问题是并非所有生物都能再生相同数量的生命值,因此我必须将该数量 (regenerateValue) 放在某处。因为我不能把它放在界面上(因为我不希望所有生物的数量都相同)我想过给生物类添加一个新属性
public class SomeMonster() extends BaseCreature implements Regeneative{
//Code
private int regenerateValue;
public void regenerates(){
hitPoints = hitPoints + regenerateValue;
}
}
但我不喜欢这种方式(为什么不再生的生物的再生值应该为 0?)。我认为它给了一个类不必要的属性,因此是一个糟糕的设计。您认为这种情况的最佳方法是什么?
最佳答案
The problem I face is that not all the creatures regenerates the same ammount of hit points so I have to place that amount (regenerateValue) somewhere.
为什么它在任何地方都必须是一个字段?接口(interface)的某些实现可能对每个实例使用不同的值;其他人可能会使用常量值。
这是一个实现细节 - 因此不适合界面。当然,您可以可能将它放在实现该接口(interface)的抽象父类(super class)中。
知道接口(interface)的代码几乎肯定不应该知道或关心生物再生多少的细节——例如,它们可能根据魔法而不只是生命值再生,或者再生水平取决于他们的状态的一些其他功能。来电者不应该关心。
关于java - 在哪里放置一个接口(interface)相关的变量,它不是静态的和最终的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12821130/