应用程序上下文:我正在学习Java中的设计模式并制作一个小游戏应用程序。该应用程序允许玩井字棋和战舰等游戏,我正在努力使其可以扩展为更多 2v2 棋盘游戏。这些游戏可以在本地和服务器上玩。目前,我的每场比赛有 3 种玩家类型:
这些是在工厂模式中制作的,并在我的 BattleshipGameController 类中初始化。
现在我想到使用命令模式来分离本地和服务器逻辑,例如:
public class CommandMakeMoveBattleships implements Command {
Receiver receiver;
private int index;
public CommandMakeMoveBattleships(int index)
{
this.index = index;
}
public CommandMakeMoveBattleships(Receiver receiver, int index)
{
this.receiver = receiver;
this.index = index;
}
@Override
public void execute() {
if (receiver != null) {
// Handle online game logic
} else {
// Handle local game logic
}
}
}
我在某处看到一个命令应该始终只有一个职责。但是,如果我为每个相同的命令创建一个在线和本地命令,它将变成大量的类,这看起来“效率低下”。
问题:我应该坚持这个选项还是有更好的方法?
我相信我会选择的选项是将逻辑与命令类分开。我的意思是使用单一责任原则。所以将来,如果你想编辑你的命令,那么你将编辑
Command
类。否则,在Command
类中编辑游戏逻辑会很奇怪。这似乎违反了单一责任原则。
所以代码看起来像这样:
@Override
public void execute() {
if (receiver != null) {
// Handle online game logic
new OnlineGameLogic().DoSomething();
} else {
// Handle local game logic
new LocalGameLogic().DoSomething();
}
}