2

假设我有一个基类Base,它是子类SubASubB.

public class Base(){

    public (static?) Animation anim;

    public Base(Frame[] frames){

        CpuIntensiveAnimationCreation(frames);

        // I need only one 'instance' of Animation Per subclass.
        // Every different TYPE of subclass needs it's own Animation instance.
        // A subclass can share one Animation, among multiple subclass-instances. (static?)

    }

看,我不想为我创建的子类的每个实例初始化一个新的 Animation 实例,因为这需要相当长的时间。但是,我确实需要每个子类都有自己的动画。
我当然可以为每个子类设置一个静态动画而不使用超类,但这需要大量冗余/复制代码。

我该怎么做?

4

5 回答 5

3

不要让它成为类/子类的一部分。拥有一个会容易得多

Map<Class<? extends Base>, Animation>

创建一个动画注册表作为它自己的类,并让它包含一个类到它们的动画的映射。

于 2012-07-04T19:21:33.337 回答
2

我的建议是getAnimation()在基类中有一个抽象方法。

然后子类可以覆盖此方法以返回每个子类的静态动画。

于 2012-07-04T19:19:28.060 回答
1

因此,您的子类中需要一个静态字段来保存您描述的动画。

现在,您不想重复代码,因此您可以将生成该动画的方法放在 Base 类的静态方法中。

这是否回答你的问题?

于 2012-07-04T19:19:25.383 回答
1

怎么样Base

您创建一个构造函数,它获取一个实例,Subclass而不是正常构造检查它是否具有动画属性,如果没有调用该函数,则为该类静态初始化它?它可以从抽象方法中继承它Base

这颠倒了责任并导致基类再次负责动画在那里。

于 2012-07-04T19:19:32.890 回答
0

1 、在Base类中创建一个获取Animation的抽象方法,如getAnim() 。

2.每个子类中的动画都是静态的,所以一个单一子类的所有实例都将共享同一个动画实例。所以通过这样做,每个类都会有自己的动画。

于 2012-07-04T19:22:25.330 回答