JAVA中的类和方法 - 组织和SOLID原则

时间:2018-01-21 02:03:36

标签: java class user-interface solid-principles

我是Java的新手,我正在努力完成我们设定的项目。我必须制作一个TicTacToe游戏,它必须只包含5个类:一个驱动程序类,GUI类,一个计算机播放器的抽象类(在两个策略之间随机选择),它扩展到两个类的一个战略计算机类和一个哑电脑班。

每个人对每个班级的内容都有不同的看法,所以我想澄清一下。

我的“driver”类包含调用GUI类的main方法。我的GUI类包含所有GUI组件,以及包含所有计算机移动的计算机类。我想知道我将把所有代码放在哪里检查获胜组合并调用计算机移动?

有人说在GUI类中,但有些人认为这将违反SOLID原则。然后有人说它应该在驱动程序类中?但我不确定如何让我的驾驶员班级互动以检查获胜动作?

1 个答案:

答案 0 :(得分:0)

根据SOLID中的S,一个班级应该只有一个责任。

在这种情况下,GUI类应该只负责处理显示正在进行的操作以及鼠标或键盘输入(如果应该有的话)。毕竟,这就是(G)用户界面。

驾驶员有责任运行游戏,其中包括跟踪其状态并根据游戏状态向玩家询问他们的下一步动作。当然,这是一个检查胜利的地方,因为这是运行游戏并跟踪其状态的一部分。你希望司机知道何时停止向球员询问新动作。

此外,您不必重复检查是否已在每个计算机播放器类中赢得游戏。如果你为不同的游戏风格添加更新的类,那么这可能会增加很多重复的工作,如果你忘记在其中一个类中添加支票,会发生什么?因此,计算机播放器类不适合添加它。

就交互而言,一种简单的方法是让计算机播放器类的方法类似于:

// Returns the board state after making a move
public static Board makeMove(Board oldBoard, boolean playerIsXs) {

您可以制作一个提供该方法的Player interface,然后在每个计算机播放器类中实现它,这样可以轻松制作新的计算机播放器。驱动程序调用该方法,然后检查返回的Board是否为胜利或平局,这可以是单独的boolean isGameEnded(Board board)方法,甚至是三种不同的方法来检查X获胜,O获胜和平局

当然,还有其他组织事物的可能性,因此您可以进行实验。