假设foo有5个方法,我的客户端将调用它们。我在过去编组了一个在服务器上解组的对象时犯了错误。然后我检查对象中的变量并使用switch语句,服务器逻辑可以确定应该调用哪个动作。
我想避免这种情况,所以我相信命令模式可以帮助我。但是,对于服务器上的示例'foo'类,我是否需要为foo中要调用的每个方法创建一个命令类?从客户端发送到服务器的类应该是命令类吗?在这种情况下,我只需要1个接收器吗? - foo类?
非常感谢您的帮助,并对此处的'foo'课程名称感到抱歉。我还没有任何具体的类名!
最好的问候
答案 0 :(得分: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()方法实现)与决定使用哪个命令的逻辑从知道如何在网络上接收消息的逻辑中分离出来。