【问题标题】:Should polymorphic objects be updated in one list [closed]应该在一个列表中更新多态对象[关闭]
【发布时间】:2016-02-14 21:30:33
【问题描述】:

我有以下设置:

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();

或者完全是别的什么?

【问题讨论】:

    标签: java oop polymorphism


    【解决方案1】:

    选项 2 更好。为了更好的 OOP,“needMoreEnemies”块应该放在 Enemy 类中,可能作为静态方法,或者可能在更新方法中。这将允许其他类进行“每帧一次”检查。

    当然,而不是:

    for (Entity i : entities)
        i.update();
    

    使用 Java 8 风格:

    entities.stream().forEach(Entity::update);
    

    【讨论】:

      【解决方案2】:

      如果您不必分别处理 enemiesplayers,则第二种方法更好:保持单独的计数并在所有其他情况下多态地处理对象更容易。

      另一方面,如果您有时需要隔离对象以进行单独处理,则最好采用第一种方法。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-05-26
        • 1970-01-01
        • 1970-01-01
        • 2016-01-03
        • 1970-01-01
        • 1970-01-01
        • 2016-11-18
        相关资源
        最近更新 更多