我正在用单元格编写简单的游戏,这些单元格可以处于免费和被玩家采取两种状态。
interface Cell {
int posX();
int posY();
}
abstract class BaseCell implements Cell {
private int x;
private int y;
public int posX() {
return x;
}
public int posY() {
return y;
}
...
}
class FreeCell extends BaseCell {
}
class TakenCell extends BaseCell {
private Player owningPlayer
public Player owner() {
return owningPlayer;
}
}
在每一轮中,我需要检查所有单元格以使用以下方法计算下一个单元格状态
// method in class Cell
public Cell nextState(...) {...}
并收集(在Set
)所有尚未采取的细胞。上面的方法返回Cell
是因为单元格可能会从 Free 变为 Taken 或相反。我正在做类似下面的事情来收集它们:
for (Cell cell : cells) {
Cell next = cell.futureState(...);
if(next instanceof FreeCell) {
freeCells.add(currentCell);
}
...
}
它很丑。如何做到这一点以避免这种instanceof hacks?我不是在谈论另一个 hack,而是想找到合适的 OOP 解决方案。