我定义了一组模板方法
{
①checkOpcode
②checkAsw
....
doSomething
}
在最后一步doSomething之前的每一步都是一个check过程,返回一个布尔值,如果是false则退出此模板方法。请问如何把代码写的好看?
我想了几种方法,但都觉得不怎么样
①用if...else...
②当check返回值是false时抛出异常结束
③每个check时重新调用此模板方法,但是感觉像这种递归方式开销很大
求一个完美的解决方法

解决方案 »

  1.   

    目前我的方法是这样,求指导:public abstract class TemplateProcess
    {
    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);
    }
    }
    }
      

  2.   

    用switch case
    楼主也可以看下设计模式的状态模式(注:未必适用你的情况)。