我有一個算法大綱 - 一些邏輯步驟必須按特定順序執行。算法的結果必須是某個數字。當然,這使我想到了使用模板方法模式的想法。這適用於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