Java国际象棋 : Should finding nearby square be a method of Square or Board class?

标签 java oop architecture

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

例如:如果我调用 getNearbySquare(mySquare, 3, 2),它应该返回我的 Board 中位于 mysquare 上方 3 和 mySquare 右侧 2 的正方形对象。

我最初将其编写为 Square 类中的实例方法,它只接受垂直和水平偏移。问题是,我正在创建然后返回一个新的方形对象,而不是 Board 类中的二维数组中的正确对象。

我看到两个选项:

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

2) 在 Board 类中创建一个实例方法执行相同的操作,但不需要我像 1) 那样传入 Board 对象。相反,我需要传入方形对象。

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

感谢您的帮助, 马里奥格

最佳答案

从一个非常简单的角度来看,将 getNearbySquare() 方法作为 Board 的实例方法比作为 Squares 的实例方法更有意义,因为该方法将需要有关电路板布局和人口的详细信息,这将更容易在 Board 实例中完成(并保持封装/松散耦合)。

Square 实例上使用该方法意味着让 Square 对象能够访问有关棋盘的信息,而这些信息可能应该是私有(private)的。

相关阅读;

关于Java国际象棋 : Should finding nearby square be a method of Square or Board class?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27870276/

相关文章:

java - 确保 Java 中的 UML 约束?

javascript - 如果我可以随时向对象插入任何属性,那么在 javascript 中创建类有什么用

java - 重型后端中间层服务器应用程序中的 Thread Local 建议

c++ - 线程体系结构问题 C++ 消息传递

java - For 循环限制无限但仍然有效

java - 如何将某个字符放在某个字符串之前?

java - 无法使用 JDK 7u21 和 7u25 调试小程序

java - 当您在其中调用另一个方法时,方法的执行流程是否等待?

.net - 为 dll 设置单独的配置文件是否是好的设计?

version-control - 如何管理业务规则略有不同的多个客户?