C# 命令模式:按顺序执行多个命令

C# 命令模式:按顺序执行多个命令,c#,design-patterns,command-pattern,C#,Design Patterns,Command Pattern,我想发出一系列命令执行,但只有在前面的命令成功时才执行。现在,我正在命令对象中引发一个事件,指示命令是成功还是失败。我用它来控制执行,但感觉不雅 例如: command1.CommandSucceeded += delegate { command2.Execute(); }; command1.Execute(); 这是可行的,但感觉很笨拙和不直观。我可以在Execute()上返回一个布尔值,表示成功或失败,但这是同一条路径。我可以在失败时抛出异常,这可能会导致代码更干净,但可能是杀伤力过大

我想发出一系列命令执行,但只有在前面的命令成功时才执行。现在,我正在命令对象中引发一个事件,指示命令是成功还是失败。我用它来控制执行,但感觉不雅

例如:

command1.CommandSucceeded += delegate { command2.Execute(); };
command1.Execute();
这是可行的,但感觉很笨拙和不直观。我可以在Execute()上返回一个布尔值,表示成功或失败,但这是同一条路径。我可以在失败时抛出异常,这可能会导致代码更干净,但可能是杀伤力过大


有什么建议吗?

我通过设置命令“链”来解决这个问题。我创建了一个包含其他命令的Command对象,然后在调用Do时依次激发每个命令。在您的例子中,您可以让该命令调用委托,并且只有在成功的情况下才触发序列中的下一个命令


我想有一种方法可以做到这一点。

返回布尔值或表示某种状态的对象并没有那么糟糕。它可能让人感觉笨拙,但它简单明了

我使用的一个实现如下所示:

foreach (ICommand command in commands)
{
  bool success = command.Execute();
  if (!success) break;
}
首先,我将命令对象添加到列表中

List<ICommand> commands = new List<ICommand>;
commands.Add(command1);
commands.Add(command2);

是的,责任链模式在这里很有用。我不知道它叫什么。谢谢你的信息。责任链模式似乎很适合。谢谢你的回复。