我应该在命令模式java中分离本地和在线逻辑吗

问题描述 投票:0回答:1

应用程序上下文:我正在学习Java中的设计模式并制作一个小游戏应用程序。该应用程序允许玩井字棋和战舰等游戏,我正在努力使其可以扩展为更多 2v2 棋盘游戏。这些游戏可以在本地和服务器上玩。目前,我的每场比赛有 3 种玩家类型:

  • AI战舰玩家
  • 控制台战舰播放器
  • UI战舰播放器

这些是在工厂模式中制作的,并在我的 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

        }
    }
}

我在某处看到一个命令应该始终只有一个职责。但是,如果我为每个相同的命令创建一个在线和本地命令,它将变成大量的类,这看起来“效率低下”。

问题:我应该坚持这个选项还是有更好的方法?

java design-patterns command-pattern
1个回答
0
投票

我相信我会选择的选项是将逻辑与命令类分开。我的意思是使用单一责任原则。所以将来,如果你想编辑你的命令,那么你将编辑

Command
类。否则,在
Command
类中编辑游戏逻辑会很奇怪。这似乎违反了单一责任原则。

所以代码看起来像这样:

@Override
public void execute() {
    if (receiver != null) {
        // Handle online game logic
        new OnlineGameLogic().DoSomething();

    } else {
        // Handle local game logic
        new LocalGameLogic().DoSomething();
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.