我正在编写一个控制台应用程序,它通过一个包含N个步骤的算法。在执行步骤N
之前正确执行步骤N+1
非常重要。否则程序应该停止处理错误消息。
我当然可以使用嵌套的if
语句执行此操作并使用try-catch-finally
(最后使用continue标志来决定程序是否应该处理)。但我正在寻找一种更好的结构化设计模式或方法来做到这一点。有什么建议吗?
答案 0 :(得分:4)
答案 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)
您可以使用:
使用Java 8 API的一个示例可能是使用比较器接口。
以下是使用函数组成的链接函数示例:
Comparator.comparing(name).thenComparing(age).
单击here,以获取有关此内容的详细文章。