设计模式:扩展常量列表

时间:2014-04-14 00:49:50

标签: java design-patterns inheritance polymorphism

我知道标题不是很具描述性,但希望我能用代码澄清一些内容。我有一个看起来像这样的课程:

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,对所有子类统一更新)。没有其他外部对象应该能够改变实体的状态,只能改变实体对象本身。

这整个设计对我来说似乎有点可疑,但我不知道如何改变它。一种替代方法是使“状态”成为由扩展实体的类扩展的自己的类。但是,使用此方法,每个状态参数都需要自己的函数,并且参数不能像现在一样迭代。我想知道是否有一个明确的设计模式,我正在做什么,或者我是否应该坚持我所拥有的。谢谢!

0 个答案:

没有答案