我有以下设置:
public abstract class Entity {
public abstract void update();
}
public class Particle extends Entity {
// ...
}
public class Enemy extends Entity {
// ...
}
我需要知道每一帧敌人的数量:
if (numEnemies > 50)
doSomething();
那么,以下哪一项是更合适的设计?
选项1:
List<Entity> enemies;
List<Entity> players;
// ...
int numEnemies = enemies.size();
for (Entity i : enemies)
i.update();
for (Entity i : players)
i.update();
选项2:
List<Entity> entities;
int numEnemies = 0;
// ...
if (needMoreEnemies()) {
++numEnemies; // Keep a count and decrease on removal
entities.add(new Enemy());
}
for (Entity i : entities)
i.update();
还是别的什么呢?
答案 0 :(得分:3)
选项2更好。对于更好的OOP,&#34;需要更多的敌人&#34;块应该放在Enemy类中,可能作为静态方法,或者可能在更新方法中。这将允许其他类具有每帧一次&#34;#34;检查。
当然,而不是:
for (Entity i : entities)
i.update();
使用Java 8样式:
entities.stream().forEach(Entity::update);
答案 1 :(得分:2)
如果您不必单独处理enemies
和players
,则第二种方法更好:保持单独计数并在所有其他情况下以多态方式处理对象更容易。
另一方面,如果您有时需要将对象隔离以进行单独处理,那么第一种方法会更好。