Java OOP:构建对象树/对象族

时间:2012-04-25 07:08:18

标签: java oop

自从我使用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);

3 个答案:

答案 0 :(得分:1)

正确?嗯,工作吗?然后它可能正确

是否是体面的方式,然后答案是“也许”。很难说这个代码在什么上下文中。但是有些事情你可以记住:

  • 在哪个类(或对象)中设置了Stat?您是否觉得该类的责任是这样做的,并且知道从中获取它们的数据库值是什么?如果没有,请考虑建立一个这样做的类。
  • 制定thisCharacter.hp.setCurrent(...)等受链接的来电违反了principle of least knowledge。有时你无法帮助它,但通常它会导致kludgy代码。考虑使用能够处理统计数据周围所有逻辑的东西。在您的代码中,您可能需要HealthStatsHandler loadStats(),其中包含saveStats()takeDamage(int dmg)等方法以及revive(int health)和{{1}}等更改操作。
  • 如果您在找到正确的对象设计时遇到问题,那么请研究SOLID principles。它们提供了很好的指导方针,任何开发人员都应该遵循这些准则,如果他们想要具有可扩展和“干净”的代码。

答案 1 :(得分:0)

这不是一棵树。两个人不可能有一层以上的孩子。

通常您定义一个界面,让我们称之为Node,其中StatCharacter都会实现它,而Character的两个孩子的类型为Node

答案 2 :(得分: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构造函数,该构造函数将采用hpmp