2012-07-04 15 views
2

假设我有一个基类Base,它的子类SubASubBJava多个子类,但不同的类型

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实例,因为它需要相当长的一段时间。然而,我确实需要每个子类都拥有它自己的动画。
我可以当然有一个静态的动画每个子类,不使用超类,但这将需要大量的冗余/复制代码。

我该如何解决这个问题?

回答

2

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

然后,子类可以重写此方法,以便为每个子类返回一个静态Animation。

1

所以,你需要在你的子类中的静态字段来保存你描述的动画。

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

这是否回答你的问题?

+0

这是个好主意,但是我仍然必须在子类中保留一个Animation变量,这也是我不喜欢的。 – user717572

+0

嗯..你有选择吗?您希望每个子类都有一个动画变量(不是每个实例,即您想要一个静态变量),并且您说每个子类的动画都不相同。无论如何,你将有一个每个子类的变量,对吧? – Miquel

1

如何在Base

您创建一个构造函数,得到的Subclass一个实例,并代替正常施工检查其是否具有动画属性,如果没有调用的函数初始化静态它的类?它可以从Base

中的抽象方法继承它,它反转责任并导致Base类再次负责动画。

3

请勿将其作为类/子类的一部分。这将是一个更容易有

Map<Class<? extends Base>, Animation> 

创建一个动画注册表作为自己的阶级和有它含有的类映射到他们的动画。

+0

迄今为止最好的解决方案! – GETah

+0

事实上,我之前想过这个。我认为Ethan的解决方案在我的情况下更好,因为它现在更容易实施。 – user717572

+0

这很有趣,我会预料到要做更多的工作。 *耸肩*但嘿,如果它完成了工作! – corsiKa

0

1.创建一个获取动画的抽象方法,如基类中的getAnim()

2. 让让动画静止在每个子类中,所以所有单个子类的实例将共享相同的动画实例。所以通过这样做,每个班级都将拥有自己的动画。