Java OOP:构建对象树/对象族
我已经有一段时间没有使用Java了,我想知道这是否是一种体面甚至正确的设置方式 仅供参考,userResults指的是下面代码中不存在的JDBI变量 欢迎提出更好的方法,谢谢Java OOP:构建对象树/对象族,java,oop,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 = curren
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);
这不是一棵真正的树。这是不可能的两个有超过一层的孩子 通常您定义一个接口,我们称之为
节点
,其中Stat
和Character
都实现了它,并且Character
的两个子节点的类型是节点
正确吗?好吧,行吗?那么它可能是正确的
不管这是不是一种体面的方式,答案都是“也许”。很难从这段代码所处的上下文中分辨出来。但有些事情你可以记住:
设置在哪个类(或者更确切地说是对象)中?您是否觉得这是类的责任,并且知道从哪些数据库值获取它们?如果不是,考虑制作一个这样的类。Stat
- 进行链接调用,例如
,违反了。有时你会情不自禁,但通常会导致代码混乱。考虑拥有处理统计数据周围所有逻辑的东西。在代码中,您可能需要一个thischacter.hp.setCurrent(…)
,该处理程序具有HealthStatsHandler
、loadStats()
等方法,以及saveStats()
和takeDamage(int-dmg)
等变异操作恢复(int-health)
- 如果你很难弄清楚它是否有正确的对象设计,那么就研究一下。它们提供了很好的指导原则,任何开发人员都应该遵循这些指导原则,如果他们想要拥有可扩展且“干净”的代码的话
我会考虑单独创建STAT对象并将它们传递到字符中,并使字符属性私有化如下:
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
另外一个简单的步骤是创建一个
字符
构造函数,该构造函数将采用hp
和mp
这一问题可能会得到更好的解决。对于您当前的实现,有更好的方法吗?codereview?+1这些原则可以被认为是与试图实现具有高内聚性的类相一致的,对吗?是的,争取和。这是大多数软件工程学校都应该教的东西,但在我的脑海中,这几乎是失败的。