假设我有一个基类Base
,它的子类SubA
和SubB
。
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实例,因为它需要相当长的时间。但是我确实需要每个子类拥有它自己的动画 我可以在每个子类中使用静态动画而不使用超类,但这需要大量冗余/复制代码。
我该怎么做?
答案 0 :(得分:3)
不要让它成为类/子类的一部分。
会更容易Map<Class<? extends Base>, Animation>
创建一个动画注册表作为自己的类,并让它包含类到动画的映射。
答案 1 :(得分:2)
我的建议是在基类中使用抽象方法getAnimation()
。
子类可以覆盖此方法,以返回每个子类的静态动画。
答案 2 :(得分:1)
因此,您需要在子类中使用静态字段来保存您描述的动画。
现在,您不想复制代码,因此您可以将该方法放在Base类的静态方法中生成该动画。
这会回答你的问题吗?
答案 3 :(得分:1)
Base
:
你创建一个构造函数来获取Subclass
的实例,而不是正常的构造检查它是否有动画属性,如果没有调用该函数,则静态地为该类初始化它?它可以从Base
反转责任并导致Base类再次负责动画就在那里。
答案 4 :(得分:0)
1。在Base类中创建一个抽象方法来获取类似getAnim()的动画。
<强> 2 强> 让我们在每个子类中动画静态,因此单个子类的所有实例将共享相同的动画实例。因此,通过这样做,每个类都将拥有自己的动画。