2012-04-25 63 views
0

从我使用Java开始就一直在想,如果这是一种体面的或者甚至是正确的设置方式。Java OOP:构建对象树/对象系列

仅供参考,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); 
+2

这个问题可能会在[codereview堆栈交换站点](http://codereview.stackexchange.com/)获得更好的牵引力。 – Spoike 2012-04-25 07:11:07

+0

您当前实施的更好方法?代码审查? – Tobi 2012-04-25 07:17:15

回答

1

对不起?那么,工作?那么它可能是正确

无论它是不是体面的方式做到这一点,那么答案是“也许”。这是很难从这个代码是在什么情况下,告诉但也有一些事情你可以记住,虽然:

  • 在哪一类(或对象,而)是Stat集?你觉得这是类的责任做到这一点,并知道什么数据库值来获取它们?如果没有,请考虑制作某种类型的课程。
  • 进行链接调用如thisCharacter.hp.setCurrent(...)违反principle of least knowledge。有时你无法提供帮助,但通常它会导致错误代码。考虑一下处理所有关于统计数据的逻辑。在您的代码中,您可能需要一个HealthStatsHandler,其中有方法,如loadStats(),saveStats(),以及变异器操作,如takeDamage(int dmg)revive(int health)
  • 如果您在找出正确的对象设计时遇到困难,请查阅SOLID principles。他们提供了很好的指导方针,任何开发人员如果想要具有可扩展和“干净”的代码,都应该遵循。
+0

+1这些原则可以被认为是内联的试图实现高凝聚力的课堂,对吧? – Brady 2012-04-25 07:28:13

+1

是的,争取[低耦合](http://en.wikipedia.org/wiki/Coupling_(computer_programming))和[高凝聚力](http://en.wikipedia.org/wiki/Cohesion_(computer_science)) 。大多数软件工程学院都应该教这些东西,但在我看来很失败。 – Spoike 2012-04-25 07:33:17

0

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

通常你定义一个接口让我们把它Node其中两个StatCharacter实现它和Character两个孩子将有类型Node

0

我会考虑seperately创建统计对象并将其传递到性格,使得如下字符属性私有:

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