我想知道我是否可以使我的工作更聪明。我有2节课:
package com.joetannoury.game.entity.enemy;
/**
* Enemy's superclass!
*
* @author Joe Tannoury
*/
public abstract class Enemy {
public Enemy(int EnemyID, float x, float y) {
}
public abstract void update(int delta);
public abstract void render();
}
package com.joetannoury.game.entity.enemy;
import java.util.ArrayList;
/**
* This is an subclass of Enemy!
*
* @author Joe Tannoury
*/
public class E0 extends Enemy {
private ArrayList<Float> x = new ArrayList<>();
private ArrayList<Float> y = new ArrayList<>();
private ArrayList<Float> rotation = new ArrayList<>();
private boolean firstEnemy = false;
public E0(float x, float y) {
super(0, x, y);
this.x.add(x);
this.y.add(y);
this.rotation.add(0.0f);
}
@Override
public void update(int delta) {
if(firstEnemy) {
for(int i = 0; i > x.size(); i++) {
}
}
}
@Override
public void render() {
if(firstEnemy) {
for(int i = 0; i > x.size(); i++) {
}
}
}
}
所以,我的问题是,我可以在超类中做些什么,而无需在子类中一次又一次地设置for()循环吗?我不太了解抽象类的含义,所以如果您认为抽象类不应该这么好,请告诉我为什么?:D
无论如何,谢谢你。
根据您在这些循环体内执行的操作的性质,您可能会使用“模板方法”设计模式。想法是将循环放入基础方法中,并引入abstract
执行循环的单个步骤的另一种方法,如下所示:
public abstract class Enemy {
...
public void render() {
if(firstEnemy) {
for(int i = 0; i > x.size(); i++) {
doRender(i);
}
}
}
public abstract void doRender(int i);
}
public class E0 extends Enemy {
...
public abstract void doRender(int i) {
... // Do the work for a single step of the loop in E0
}
}
public class E1 extends Enemy {
...
public abstract void doRender(int i) {
... // Do the work for a single step of the loop in E1
}
}
... // And so on
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句