您在问如何简化。如果我可以建议一些粗体,为什么不使用一个不透明的int作为方向,并使用一个静态类来处理呢?“不透明的int”是指您的代码永远不会直接使用它,而只是将其作为Direction类的参数。
这是一些部分的Java风格的伪代码,以显示我的意思。
// 0 = east, 1 = north, 2 = west, ...public class Direction { static int [] moveX = [ 1, 0, -1, 0]; static final int NORTH = 1; // coordinates after moving one step in the given direction static Pair move(int direction, Pair old) { return new Pair( old.x + moveX[direction] , old.y + moveY[direction] ); } static int turnLeft(int direction) { return (direction+1) % 4; } static int turnRight(int direction) { return (direction+3) % 4; }}这种处理方式将具有使用较少分配的优势,因此垃圾收集器将不需要经常运行。另一个优点是,设计保持面向对象的意义,即如果以后您希望一次能够旋转45度,则可以轻松更改方向类别。
为了回答您的其他问题,我认为将Directions沿某个方向更改的任务委托给Direction类是完全可以的。流动站仅在流动站对象将包含一个int字段来存储其面对的方向的意义上负责保持方向。



