我定义了一组模板方法
{
①checkOpcode
②checkAsw
....
doSomething
}
在最后一步doSomething之前的每一步都是一个check过程,返回一个布尔值,如果是false则退出此模板方法。请问如何把代码写的好看?
我想了几种方法,但都觉得不怎么样
①用if...else...
②当check返回值是false时抛出异常结束
③每个check时重新调用此模板方法,但是感觉像这种递归方式开销很大
求一个完美的解决方法
{
①checkOpcode
②checkAsw
....
doSomething
}
在最后一步doSomething之前的每一步都是一个check过程,返回一个布尔值,如果是false则退出此模板方法。请问如何把代码写的好看?
我想了几种方法,但都觉得不怎么样
①用if...else...
②当check返回值是false时抛出异常结束
③每个check时重新调用此模板方法,但是感觉像这种递归方式开销很大
求一个完美的解决方法
{
public final Object[] process(CTG2 recv,CTG2 send,int step){
switch (step)
{
case 0:
if(recv.getPayload().opcode == IOpcode.FORWARD){
process(recv, send, 2);
}else{
process(recv, send, 1);
}
break;
case 1:
checkOpcode(recv,send,step);
break;
case 2:
checkAsw(recv,send,step);
break;
case 3:
return errorHandler(recv,send);
case 4:
checkAddress(recv,send,step);
case 5:
return successHandler(recv,send);
case 99:
return checkError(recv,send);
}
return null;
} public abstract Object[] successHandler(CTG2 recv, CTG2 send); public abstract void checkAddress(CTG2 recv, CTG2 send, int step); public abstract Object[] errorHandler(CTG2 recv, CTG2 send); private void checkAsw(CTG2 recv, CTG2 send, int step)
{
if(recv.getPayload().asw == (byte)0xFF){
process(recv,send,3);
}else{
process(recv,send,4);
}
} private Object[] checkError(CTG2 recv, CTG2 send)
{
return null;
} private void checkOpcode(CTG2 recv, CTG2 send, int step)
{
if(recv.getPayload().opcode == send.getPayload().opcode){
process(recv,send,1);
}else{
process(recv,send,99);
}
}
}
楼主也可以看下设计模式的状态模式(注:未必适用你的情况)。