命令模式基础

时间:2015-10-27 17:53:38

标签: java design-patterns command-pattern

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

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

命令模式非常适合于此,因为“upload”,“ping”,“replicate”和“shutdown”中的每一个都可以表示为命令。

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

1。解析输入的责任是谁?
输入文件包含文件和服务器所在的必要信息。谁来做解析?客户?接收器?调用

2。应该在哪里存储解析的信息?
来自前3行的解析信息将在HashMap中。根据{{​​3}},

  

接收方知道如何执行请求。

所以,我猜测Receiver是HashMap将存储的那个?

第3。命令可以返回结果吗?
“ping”或“shutdown”等命令应指示命令执行后发生的情况。这些命令可以返回值吗?

1 个答案:

答案 0 :(得分:3)

  
      
  1. 解析输入是谁的责任?
  2.   

每一行有两部分:命令名和参数。参数是特定于命令的,因此您应该CommandsProvider应该:

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

命令PingCommand知道它的第一个参数是server。从理论上讲,您可以将每个命令与ArgumentsParser配对,该execute()采用一系列单词并使用它配置命令,但不确定是否有必要。

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

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

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

是的,您可以根据需要实施# Data pattern generator def get_random_chunk_pattern(): return ''.join(random.choice(ascii_uppercase + digits + ascii_lowercase) for _ in range(8)) 方法。