首页 > 解决方案 > 每个操作都需要是一个命令吗?

问题描述


我想知道的:

背景段落中列表中提供的每个操作是否都需要是单个命令?单个命令有什么作用?


背景: 我需要编写一个从 cmd 启动的程序,并对可以作为参数输入到命令行的字符串执行操作。您还需要将要作为 CLA 执行的操作传递。例如: myprogram.exe /es "This is the string" /ds /rs 。Es = 输入字符串,ds = 显示字符串,rs= 反向字符串。没有必要实施撤消/重做。


可能的操作是:

• 输入字符串

• 显示字符串

• 反转字符串

• 大写所有字母

• 小写所有字母

• 特定大写字母

• 小写特定字母

• 消除连续重复

• 向左旋转

• 右旋

• 游程编码

• 游程解码

• 删除每第 n 个字符

• 按字符串拆分并优先获取

• 按字符串拆分并取最后


我做了什么/我的方法是什么:

经过一些研究,我认识到实现这个示例的最佳方式是使用命令模式和责任链。我正在阅读四人帮写的书:设计模式。但我认为我不完全理解这个概念。我知道,使用命令模式有:调用者、接收者、命令、命令接口等。我知道调用者(这里是我的 ProgramHandler.cs 类)生成单个命令,为它们配备接收器和操作。并且单个命令调用接收器来执行操作。接收器是一个名为 StringManipulator 的类,它包含操作字符串的所有方法。我的想法也是,解析器解析 CLA 并“告诉” ProgramHandler 需要创建哪些命令。

(请看我的第一个设计方法,图片在最后!)

但:


附加问题:

拥有一个包含接收器和动作的抽象类 SimpleCommand 以及之后从 SimpleCommand 继承的具体命令,这不是相当多的开销吗?

感觉有点不对,但另一方面:每个命令都需要一个动作和一个接收者,因此分别给每个具体命令提供这些字段将违反面向对象编程的“规则”。

这是如何正确设计的?


类图

类图

感谢您的时间和帮助!

此致!

标签: c#commandcommand-line-argumentscommand-pattern

解决方案


推荐阅读