Java 国际象棋:寻找附近的方格应该是 Square 还是 Board class 的方法?

Java Chess: Should finding nearby square be a method of Square or Board class?

我正在 Java 中编写一个国际象棋游戏,并已使用具有二维方形对象数组的棋盘 class 对其进行了设置。每个正方形都有高度和宽度(介于 0 和 7 之间)。我将编写一个方法,它接受一个方形对象、一个垂直偏移量和一个水平偏移量。

例如:如果我调用 getNearbySquare(mySquare, 3, 2),它应该 return 我的 Board 中的方形对象,它在 mysquare 上方 3,在 mySquare 右侧 2。

我最初是在 Square class 中将其作为实例方法编写的,它只是采用了垂直和水平偏移。问题是,我正在创建然后 returning 一个新的方形对象,而不是我的 Board class.

中二维数组中的正确对象

我看到两个选项:

1) 在 Square class 中创建一个实例方法,它接收 Board 对象、垂直偏移量和水平偏移量。我将找到调用此方法的正方形对象的当前高度和宽度,添加垂直和水平偏移以获得所需正方形在 Board 中的新位置,然后使用 Board[newHeight][newWidth] 访问它。

2) 在 Board class 中创建一个实例方法做同样的事情,但不需要我像 1) 那样传入 Board 对象。相反,我需要传入方形对象。

就做出这些决定而言,是否有普遍接受的做法?

感谢您的帮助, 马里奥格斯

从一个非常简单的角度来看,getNearbySquare() 方法作为 Board 的实例方法比从方块中更有意义,因为该方法需要有关电路板的布局和填充,这将更容易在 Board 实例中完成(并保持 encapsulated/loosely 耦合)。

Square 实例上使用该方法意味着让方形对象可以访问有关板的信息,这些信息可能应该是私有的。

相关阅读;

Square 知道它所属的 Board 很好,因为 Square 不是孤立的。否则,广场知道它的位置就没有意义了。当用户单击 Square 时,Square 可能只是将该事件传达给其董事会,董事会将能够根据 Square 的位置对用户操作做出反应。鉴于 Board 也应该知道它的 Squares,它可以很容易地计算出哪个将成为下一个动作的目标。

另见 OOP Design for Chess Game in Java (Trouble with Piece / Board Interaction)