因此,我想這個狀態機(在下一個代碼中有些狀態由於它們還沒有完成而丟失)與很多幾乎完全相同的狀態。 我確定有一個更好的方法來實現這個目標,但是我找不到它(可能有課,但我不確定)。改善狀態機
switch(firstState) {
case INITIAL:
if(c == 'g') {
builder.append(c);
firstState = FirstParserState.METHOD_G;
}
else if(c == 'p') {
builder.append(c);
firstState = FirstParserState.METHOD_P;
}
else
firstState = FirstParserState.ERROR;
break;
case METHOD_G:
if(c == 'e') {
builder.append(c);
firstState = FirstParserState.METHOD_E;
}
else
firstState = FirstParserState.ERROR;
break;
case METHOD_E:
if(c == 't') {
builder.append(c);
firstState = FirstParserState.METHOD_T;
}
else
firstState = FirstParserState.ERROR;
break;
case METHOD_T:
if(c == ' ') {
method = builder.toString();
builder.setLength(0);
firstState = FirstParserState.WHISE_SPACE;
}
else
firstState = FirstParserState.ERROR;
break;
case METHOD_P:
if(c == 'o') {
builder.append(c);
firstState = FirstParserState.METHOD_O;
}
else
firstState = FirstParserState.ERROR;
break;
case METHOD_O:
if(c == 's') {
builder.append(c);
firstState = FirstParserState.METHOD_S;
}
else
firstState = FirstParserState.ERROR;
break;
case METHOD_S:
if(c == 't') {
builder.append(c);
firstState = FirstParserState.METHOD_T;
}
else
firstState = FirstParserState.ERROR;
break;
case ERROR:
;//TODO: Dispatch error, malformed 1st line
break;
}
是否有我可以申請的任何模式?或者其他的東西?
在此先感謝。
你想達到什麼目的? –
我必須解析一個HTTP請求(使用狀態機)。這解析了第一行(代碼不完整)。 – Juan
雖然EJP的答案可能是最簡單和最有效的實施,但替代方案將是國家模式。每個狀態由一個狀態實例表示,狀態負責做1。實際工作(你的'if(c == x){build.append(c);}'東西)2.狀態改變 –