si ... optimización de código demás

En el código inevitablemente se encontrará con demasiados si el caso lo demás, por un lado, es el diseño original no le importaba, por otra parte, puede ser debido a cambios en los requisitos. Sin embargo, un gran número de código si el mundo sabe que esta situación no es muy buena, entonces hablamos de cómo este caso debe ser optimizado

if(条件1){
    ....
}else if(条件2){
    ....
}else if(条件3){
    ....
}else{
    ....
}

Tabla 1. unidad

Tabla medios de accionamiento con una búsqueda en la tabla para obtener el valor

private static Map<Status, Function<Integer, Integer>> conditions;
static {
    conditions = new HashMap<>();
    conditions.put(Status.CONDITION1,(t)->{
        return t+1;
    });
    conditions.put(Status.CONDITION2,(t)->{
        return t+2;
    });
}

@Test
public void test(){
    Integer apply = conditions.get(Status.CONDITION1).apply(1);
    System.out.println(apply);
}

enum Status{
    CONDITION1,CONDITION2;
}

2. La cadena de patrón de responsabilidad

Cuando la condición de determinación compleja, no puede utilizar la tabla de conducción descrita anteriormente.
Cadena de Responsabilidad usando más escenarios, como: Filtro, Interceptor.

abstract class Handler {

    protected Handler next;

    public void setNext(Handler next) { // 设置下一个处理者
        this.next = next;
    }

    public abstract void handlerRequest(int request); // 请求处理逻辑
}

class ConcreteHandler1 extends Handler {
    @Override
    public void handlerRequest(int request) {
        if (request >= 0) {
            System.out.println("request >= 0");
        } else {
            // 如果不满足条件进行下一次
            next.handlerRequest(request); // 将请求发送给下一位
        }
    }
}
class ConcreteHandler2 extends Handler {
    @Override
    public void handlerRequest(int request) {
        if (request >= 10) {
            System.out.println("request >= 10");
        } else {
            // 如果不满足条件进行下一次
            next.handlerRequest(request); // 将请求发送给下一位
        }
    }
}

public class TestHandler {
    public static void main(String[] args) {
        Handler handler1 = new ConcreteHandler1();
        Handler handler2 = new ConcreteHandler2();
        // 设置责任链的下家
        handler1.setNext(handler2);
        handler1.handlerRequest(8);
    }
}

Supongo que te gusta

Origin blog.51cto.com/13733462/2484881
Recomendado
Clasificación