我有一个算法大纲 - 一些逻辑步骤必须按特定顺序执行。算法的结果必须是某个数字。当然,这使我想到了使用模板方法模式的想法。这适用于void
方法,但这里出现了我的问题:算法中的每个步骤都不是void
方法,但允许返回一个数字(因此它们是int
方法) - 如果某个步骤返回非零数字,则此数字是算法执行的结果,如果它是零 - 执行继续下一步。带返回值的模板方法
这听起来真的很微不足道,但我仍然觉得它在某种程度上丑有类似:
public int algorithm() {
int resultStep1 = step1();
if (resultStep1!=0) {
return resultStep1;
}
int resultStep2 = step2();
if (resultStep2!=0) {
return resultStep2;
}
...
}
当然step1()
,step2()
和等等都是抽象方法,有自己特定的实现在相应的班级那延伸我的。
我想到的另一个想法是使用异常,但因为我们在谈论控制流,所以这将是一种反模式。
我在这里错过了什么,或者这只是我必须写的吗?
我在这个问题的一半停下理解。你想返回第一个非零步骤,真正的问题是什么 – 2014-11-24 11:02:32
如何可迭代?你可以写一个next()给你的steps(),它不会返回下一步,但是你的结果,如果它不是零。所有紧密的一个整洁的循环。 – 2014-11-24 11:04:25
@RoyalBg当某些步骤返回一个非零数字时,那么这是算法的返回值,否则执行继续N步并返回其他东西作为最后的手段 – Anton 2014-11-24 11:05:38