Patrón de diseño dieciocho, patrón de cadena de responsabilidad

Modo Cadena de responsabilidad: Permite que múltiples objetos tengan la oportunidad de procesar la solicitud, evitando así la relación de acoplamiento entre el remitente de la solicitud y el receptor. Conecte este objeto en una cadena y pase la solicitud a lo largo de esta cadena hasta que un objeto la maneje.

La ventaja es que ni el receptor ni el remitente tienen información clara entre sí, y los objetos de la cadena en sí mismos no conocen la estructura de la cadena. Como resultado, la cadena de responsabilidad puede simplificar la interconexión de objetos. Solo necesitan para mantener una referencia a su sucesor. No es necesario mantener las referencias de todos sus candidatos a destinatarios.

Agregar o modificar la estructura de procesamiento de una solicitud en cualquier momento mejora la flexibilidad de asignar responsabilidades a los objetos.

Es muy probable que una solicitud no se procese al final de la cadena, o no se procese porque no está configurada correctamente.

//定义一个处理请示的接口
abstract public class Handler {
    
    
    protected Handler successor;

    //设置继任者
    public void setSuccessor(Handler successor) {
    
    
        this.successor = successor;
    }

    //处理请求的抽象方法
    public abstract void HandleRequest(int request);
}

public class ConcreteHandler1 extends Handler {
    
    
    @Override
    public void HandleRequest(int request) {
    
    
        if (request >= 0 && request < 10) {
    
                     //0到10,这里处理
            System.out.println(this.getClass().getName() + "处理请求" + request);
        } else if (this.successor != null) {
    
    
            this.successor.HandleRequest(request);      //转移到下一位
        }
    }
}

public class ConcreteHandler2 extends Handler {
    
    
    @Override
    public void HandleRequest(int request) {
    
    
        if (request >= 10 && request < 20) {
    
                     //10到20,这里处理
            System.out.println(this.getClass().getName() + "处理请求" + request);
        } else if (this.successor != null) {
    
    
            this.successor.HandleRequest(request);      //转移到下一位
        }
    }
}

public class ConcreteHandler3 extends Handler {
    
    
    @Override
    public void HandleRequest(int request) {
    
    
        if (request >= 20 && request < 30) {
    
                     //20到30,这里处理
            System.out.println(this.getClass().getName() + "处理请求" + request);
        } else if (this.successor != null) {
    
    
            this.successor.HandleRequest(request);      //转移到下一位
        }
    }

    public static void main(String[] args) {
    
    
        Handler handler1 = new ConcreteHandler1();
        Handler handler2 = new ConcreteHandler2();
        Handler handler3 = new ConcreteHandler3();

        handler1.setSuccessor(handler2);            //设置上下家
        handler2.setSuccessor(handler3);

        int[] Request = new int[]{
    
    2, 5, 14, 22, 18, 3, 27, 20};

        for (int num : Request) {
    
    
            handler1.HandleRequest(num);
        }
    }
}

Producción

day16chainofresponsibility.ConcreteHandler1处理请求2
day16chainofresponsibility.ConcreteHandler1处理请求5
day16chainofresponsibility.ConcreteHandler2处理请求14
day16chainofresponsibility.ConcreteHandler3处理请求22
day16chainofresponsibility.ConcreteHandler2处理请求18
day16chainofresponsibility.ConcreteHandler1处理请求3
day16chainofresponsibility.ConcreteHandler3处理请求27
day16chainofresponsibility.ConcreteHandler3处理请求20

Process finished with exit code 0

Supongo que te gusta

Origin blog.csdn.net/weixin_45401129/article/details/114629553
Recomendado
Clasificación