我想知道我是否可以完成我的工作 smarter 。我有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
无论如何,谢谢你。
答案 0 :(得分:1)
根据您在这些循环体内所做的事情的性质,您可能会使用Template Method设计模式。我们的想法是将循环放在基类中的方法中,并引入一个不同的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