我正在编写一款控制台应用程序,该程序经过N个步骤的算法。重要的是,在执行步骤N+1之前必须正确执行第N步。否则,程序应该停止工作并显示错误消息。当然我可以使用嵌套的if语句和try-catch-finally语句(在finally中使用继续标志来决定程序是否应该继续处理)。但我正在寻找更好的结构化设计模式或方法来完成此任务。有什么建议吗?
我曾经创建过一个控制自动化的进程,使用了包含所有步骤的枚举。
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:
}
Java 8 APIs 中的一个示例是使用比较器接口。
下面是一个使用函数组合链接函数的示例:
Comparator.comparing(name).thenComparing(age).
点击这里查看有关此事的详细文章。
使用递归,在遇到错误步骤时返回或停止
public void Process(int n)
{
if( n % 23 != 0 )return;
Process(n+1);
}
n
将会是你的工作数据集或当前项。你需要自己确定使用哪种数据结构。同时,对23取模检查是为了在递归检查时判断何时应该跳出。
for(int n = 0; n < 23; n++) { .. }
,带有完全不必要的开销。 - neeKoint
只是一个示例。对不起,你无法可视化除了int之外的任何传递内容。 - Travis J我喜欢的一种模式是在对象从一个步骤到下一个步骤时更新其状态,以指示它在过程中的位置。
与其从头到尾处理一个对象,我让算法的每个步骤选择处于给定状态的所有对象,对它们进行处理,并更新它们的状态以准备好下一步。
我将处理过程的每个步骤都作为一个事务,这样一个对象要么完全进入下一步,要么回滚到其先前的状态并准备再次经历此步骤。
这样,如果您的程序在中途被中断,您只需重新启动它,所有对象就可以在过程中恢复到它们离开的地方。