0

自从我使用 Java 以来已经有一段时间了,并且想知道这是否是一种体面甚至正确的设置方式。

仅供参考,userResults 指的是下面代码中不存在的 JDBI 变量。

欢迎提出更好的方法,谢谢。

public class Stat
{
private int current;
private int max;

public int getCurrent()  {return current;}
public void setCurrent(int current)   {this.current = current;}

public int getMax()  {return max;}
public void setMax(int max)   {this.max = max;}
}


public class Character
{
Stat hp = new Stat();
Stat mp = new Stat();
}

Character thisCharacter = new Character();

// Set the value of current & max HP according to db data.
thisCharacter.hp.setCurrent((Integer) userResults.get("hpColumn1"));
thisCharacter.hp.setMax((Integer) userResults.get("hpColumn2"));

// Print test values
System.out.println (thisCharacter.hp.Current);
System.out.println (thisCharacter.hp.Max);
4

3 回答 3

1

正确的?那么,它有效吗?那么它可能是正确的。

不管这是否是一种体面的方式,那么答案是“也许”。很难从这个代码的上下文中判断出来。但是你可以记住一些事情:

  • 集合在哪个类(或对象)Stat中?您是否认为班级有责任这样做并知道从哪些数据库值中获取它们?如果没有,请考虑制作某种可以执行此操作的类。
  • 进行诸如此类的链式调用thisCharacter.hp.setCurrent(...)违反了最少知识原则。有时你无能为力,但通常会导致代码混乱。考虑使用一些东西来处理围绕统计数据的所有逻辑。在您的代码中,您可能需要一个HealthStatsHandler具有诸如loadStats(),saveStats()和 mutator 操作(例如takeDamage(int dmg)和)的方法revive(int health)
  • 如果您无法弄清楚它是否具有正确的对象设计,那么请学习SOLID 原则。它们提供了很好的指导方针,任何开发人员如果想要拥有可扩展且“干净”的代码,都应该遵循这些指导方针。
于 2012-04-25T07:21:45.123 回答
0

这不是真正的树。不可能两个有超过一层的孩子。

通常你定义一个接口,让我们Node在两者都实现它的地方调用它,Stat并且Character它的两个孩子Character将具有 type Node

于 2012-04-25T07:15:29.493 回答
0

我会考虑单独创建 Stat 对象并将它们传递给 Character,并将字符属性设为私有,如下所示:

public class Character
{
  private Stat hp;
  private Stat mp;

  public Stat getHp()         {return hp;}
  public void setHp(Stat h)   {this.hp = h;}

  public Stat getMp()         {return mp;}
  public void setMp(Stat m)   {this.mp = m;}
}

// Set the value of current & max HP according to db data.
Stat hp = new Stat();
hp.setCurrent((Integer) userResults.get("hpColumn1"));
hp.setMax((Integer) userResults.get("hpColumn2"));

Character thisCharacter = new Character();
thisCharacter.setHp(hp);
// do the same for mp

一个额外的简单步骤是创建一个Character构造函数,它需要一个hp和一个mp

于 2012-04-25T07:22:19.123 回答