我知道标题不是很具描述性,但希望我能用代码澄清一些内容。我有一个看起来像这样的课程:
public abstract class Entity {
protected final static int BASE_STATE_SIZE = 3;
protected final static int AGE = 0;
protected final static int X = 1;
protected final static int Y = 2;
protected double[] state;
public Entity () {
state = new double[getStateSize ()];
...
}
protected void initDefaultState () {
state[AGE] = 0;
state[X] = Math.random () * Renderer.size.width;
state[Y] = Math.random () * Renderer.size.height;
}
protected abstract int getStateSize ();
}
public class Critter extends Entity {
protected final static int STATE_SIZE = Entity.BASE_STATE_SIZE + 1;
protected final static int HUNGER = Entity.BASE_STATE_SIZE + 0;
public Critter () {
...
}
protected void initDefaultState () {
super.initDefaultState ();
state[HUNGER] = 0;
}
protected int getStateSize () {
return STATE_SIZE;
}
}
提供更多上下文:实体只是通用对象。 Critter是更具体的对象的一个例子。实体的状态在其整个生命周期中经常变化。在这种情况下,生物的位置x,y和饥饿每秒变化多次。状态值在子类中分配(有时在主要的Entity类中,如age,对所有子类统一更新)。没有其他外部对象应该能够改变实体的状态,只能改变实体对象本身。
这整个设计对我来说似乎有点可疑,但我不知道如何改变它。一种替代方法是使“状态”成为由扩展实体的类扩展的自己的类。但是,使用此方法,每个状态参数都需要自己的函数,并且参数不能像现在一样迭代。我想知道是否有一个明确的设计模式,我正在做什么,或者我是否应该坚持我所拥有的。谢谢!