多步算法的设计模式

时间:2013-10-31 14:27:19

标签: c# .net design-patterns

我正在编写一个控制台应用程序,它通过一个包含N个步骤的算法。在执行步骤N之前正确执行步骤N+1非常重要。否则程序应该停止处理错误消息。

我当然可以使用嵌套的if语句执行此操作并使用try-catch-finally(最后使用continue标志来决定程序是否应该处理)。但我正在寻找一种更好的结构化设计模式或方法来做到这一点。有什么建议吗?

6 个答案:

答案 0 :(得分:4)

管道设计模式恰恰是这样的:以严格的步骤顺序执行复杂的过程。谷歌“管道设计模式”,你会发现很多资源。

This是一篇关于MSDN的面向编程的介绍性文章,this是一篇更为理论化的文章。

答案 1 :(得分:4)

责任链

http://www.codeproject.com/Articles/455228/Design-Patterns-3-of-3-Behavioral-Design-Patterns#Chain

或状态模式

http://www.codeproject.com/Articles/455228/Design-Patterns-3-of-3-Behavioral-Design-Patterns#State

可能是您问题的解决方案。

对于责任链模式,当您检测到错误时,您只需要设置"错误消息(处理)"过程作为链中的下一个过程。

对于状态模式,您需要将状态更改为"错误"遇到错误时,处理错误状态中的所有错误。

希望这有帮助。

答案 2 :(得分:2)

我曾经创建了一个控制自动化的流程,我使用了包含所有步骤的枚举

enum AutomationStep{Requested, Started, Waiting, Processing, Terminating};

后来我创建了一个开关/案例来处理不同的每一步

switch (currentStep)
{
  case AutomationStep.Requested : InitializeProcess(); currentstep = AutomationStep.Started; break;
  case AutomationStep.Started : StartTheEngines(); currentstep = AutomationStep.Waiting; break;
  case AutomationStep.Waiting : //etc
   break;
   default:
}

您稍后可以使用While来运行每一步

答案 3 :(得分:0)

我喜欢的一种模式是在对象从一个步骤进展到下一个步骤时更新对象的状态,以指示它在过程中的位置。

我不是从头到尾处理一个对象,而是让算法的每一步选择给定状态下的所有对象,处理它们,并更新它们的状态,为下一步做好准备。

我将流程的每一步都作为一个事务,以便一个对象完全进入下一步,或者回滚到其先前状态,并准备再次执行此步骤。

这样,如果您的程序在中间被中断,您可以将其重新启动,并且所有对象都可以在此过程中从中断处继续。

答案 4 :(得分:0)

使用递归并在遇到错误的步骤时返回或停止

public void Process(int n)
{
 if( n % 23 != 0 )return;
 Process(n+1);
}

n将成为您的工作数据集或当前设置项。您可以自行决定要使用的数据结构。此外,23的模数检查是显示何时从递归检查中断。

答案 5 :(得分:0)

您可以使用:

  1. 责任链。或
  2. 维护“进程列表”并遍历它们以处理任务。或
  3. 使用函数组合并链接函数。在Java 8中,您可以使用Java 8功能接口来实现此目的。

使用Java 8 API的一个示例可能是使用比较器接口。

以下是使用函数组成的链接函数示例:

Comparator.comparing(name).thenComparing(age).

单击here,以获取有关此内容的详细文章。