java - 在哪里放置一个接口(interface)相关的变量,它不是静态的和最终的

标签 java interface

我正处于游戏开发的早期阶段。这是某种回合制游戏,例如战锤或魔兽争霸。有些生物可以再生它们所受的伤害,为了表示这一点,我有一个这样的界面

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/

相关文章:

java - 从给定的实体类中截断/删除

java - 如何从接口(interface)实现中访问字段以进行测试

Typescript - 从接口(interface)实现匿名对象

java - 如何从pom中删除传递依赖

java - 将 cometD 的奥尔特与 tomcat 一起使用

java - 评级 field (Foursquare)

java - 如何使 CircularFifoQueue 线程安全?

Python - 如何实现与 NumPy 函数兼容的自定义类?

git - 是一个 IDE/plugin/smth 可以根据它的年龄突出显示(热图)代码吗?

delphi - 如何将接口(interface)类型传递给过程