>假设我有一个包含如下内容的文件,它是一些配置信息和一些命令的组合:
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"这样的命令应该指示命令执行后发生的情况。这些命令可以返回值吗?
- 谁负责解析输入?
每行有 2 部分:命令名称和参数。参数是特定于命令的,因此您应该具有以下CommandsProvider
:
- 将文件拆分为行
- 对于每一行,将第一个单词和其他单词分开
- 根据第一个单词创建命令(您可能有知道如何通过名称查找命令
CommandsRegistry
( - 为命令提供所有参数
命令PingCommand
知道它的第一个参数是服务器。理论上,您可以将每个命令与ArgumentsParser
配对,该命令接受单词数组并使用它配置命令,但不确定是否必要。
- 解析后的信息应存储在哪里?
信息存储在命令中,接收器只需执行它。
- 命令可以返回结果吗?
是的,您可以根据需要实现execute()
方法。