2

大家晚上好。我一直在阅读命令模式,我想知道它是否适合我想要构建的东西。

本质上,我有一个与服务器形成套接字连接的客户端。我的服务器上有 1 个类“foo”,客户端需要针对这些类调用方法。

假设 foo 有 5 个我的客户将调用的方法。我过去曾犯过编组在服务器上解组的对象的错误。然后我检查对象中的变量并使用 switch 语句,服务器逻辑可以确定应该调用什么操作。

我想避免这种情况,所以我相信命令模式可以帮助我。但是,对于我在服务器上的示例“foo”类,我是否需要为要在 foo 中调用的每个方法创建一个命令类?从客户端发送到服务器的类应该是命令类吗?在这种情况下我只需要 1 个接收器吗?- foo 类?

非常感谢您的帮助,并对这里的“foo”类名感到抱歉。我还没有任何具体的类名!

最好的祝福

4

1 回答 1

4

无论您做什么,都无法完全摆脱该 switch() 语句。命令模式会建议您执行以下操作:

abstract class AbstractCommand() {
  abstract void execute();
}
class ConcreteCommand extends AbstractCommand {
  // execute implementation
}
// more command classes as needed; probably one per each of your method calls

然后你有一个命令工厂:

class CommandFactory {
  AbstractCommand createCommandForMessage(Message m) {
    // ... switch() goes here
  }
}

你的消息接收部分变得像这样简单:

public class MessageReceiver {
  public void work() {
    while (true) {
      Message m = receiveMessage();
      AbstractCommand command = commandFactory.createCommandForMessage(m);
      command.execute();
    }
  }
}

这样做的好处是,您将命令的实际逻辑(execute() 方法实现)与决定使用哪个命令的逻辑、知道如何在网络上接收消息的逻辑清晰地分开。

于 2011-02-15T23:14:45.390 回答