我正在寫,通過與N多的步驟的算法去一個控制檯應用程序。重要的是,步N
執行步驟N+1
之前,正確完成。否則,程序應該停止工作並顯示錯誤消息。設計模式爲多步算法
我可以用嵌套的if
語句來做到這一點,並使用try-catch-finally
(最後使用continue標誌來決定程序是否應該處理)。但我正在尋找一個更好的結構化設計模式或方法來做到這一點。任何建議?我喜歡
我正在寫,通過與N多的步驟的算法去一個控制檯應用程序。重要的是,步N
執行步驟N+1
之前,正確完成。否則,程序應該停止工作並顯示錯誤消息。設計模式爲多步算法
我可以用嵌套的if
語句來做到這一點,並使用try-catch-finally
(最後使用continue標誌來決定程序是否應該處理)。但我正在尋找一個更好的結構化設計模式或方法來做到這一點。任何建議?我喜歡
我曾經創建的被控制自動化的過程,我使用的枚舉的所有步驟
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:
}
您稍後可能會使用一段時間運行每一步
一種模式是因爲它的進展從一個步驟到下一個,以指示它是在處理以更新該對象的狀態。
,而不是處理一個對象從開始到結束,我有算法的每一步選擇的所有對象在給定的狀態,對它們進行處理,並更新自己的狀態,以準備下一個步驟。
我做的過程中交易的每一個步驟,從而使物體已經要麼完全發展到下一個步驟,或回滾到以前的狀態,並準備再次經歷這一步。
這樣,如果您的程序在中間被中斷,您可以重新開始備份,所有對象都可以在過程中停止的地方繼續。
使用遞歸併返回或停止,當你打一個不正確的一步
public void Process(int n)
{
if(n % 23 != 0)return;
Process(n+1);
}
凡n
將是你的工作數據集或當前設置項。決定使用哪種數據結構取決於您。此外,23的模數檢查是顯示何時從遞歸檢查中斷開。
責任鏈
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
可能是你的問題的解決方案。
對於責任鏈模式,當您檢測到錯誤時,您只需將「錯誤消息(處理)」過程設置爲鏈中的下一個過程。
對於狀態模式,遇到錯誤時需要將狀態更改爲「錯誤」,並處理錯誤狀態下的所有錯誤。
希望這會有所幫助。
工作流程是否改變? –
你能提供關於你算法的更多信息嗎?這似乎可以使用While循環完成。 – Bas
是遞歸可能嗎? – Jonesopolis