命令模式基础知识



>假设我有一个包含如下内容的文件,它是一些配置信息和一些命令的组合:

server1 192.168.0.1  
server2 192.168.0.12  
file1 /home/user1/file1  
upload file1 to server1  
ping server1  
replicate server1
shutdown server1  
命令

模式非常适合这一点,因为"上传"、"ping"、"复制"和"关闭"中的每一个都可以表示为一个命令。

但是,我仍然有几个问题:

1. 谁负责解析输入?
输入文件具有必要的信息,例如文件和服务器的位置。谁来做解析?客户?接收器?调用程序?

2. 解析后的信息应存储在哪里?
前 3 行的解析信息将进入HashMap。根据DZone的博客文章,

接收方知道该怎么做才能执行请求。

所以,我猜接收器是存储HashMap的那个?

3. 命令可以返回结果吗?
像"ping"或"shutdown"这样的命令应该指示命令执行后发生的情况。这些命令可以返回值吗?

  1. 谁负责解析输入?

每行有 2 部分:命令名称和参数。参数是特定于命令的,因此您应该具有以下CommandsProvider

  • 将文件拆分为行
  • 对于每一行,将第一个单词和其他单词分开
  • 根据第一个单词创建命令(您可能有知道如何通过名称查找命令CommandsRegistry(
  • 为命令提供所有参数

命令PingCommand知道它的第一个参数是服务器。理论上,您可以将每个命令与ArgumentsParser配对,该命令接受单词数组并使用它配置命令,但不确定是否必要。

  1. 解析后的信息应存储在哪里?

信息存储在命令中,接收器只需执行它。

  1. 命令可以返回结果吗?

是的,您可以根据需要实现execute()方法。

最新更新