Patrón de diseño de cómics: ¿Qué es el "patrón de cadena de responsabilidad"?

----- el día siguiente -----


————————————

En una empresa, hay tres programadores cuyos nombres son Little A, Little B y Little C:

Un día, el nuevo gerente de producto de la empresa tiene un nuevo requisito, pero no sabe quién debería ser responsable de este requisito. Entonces, primero encontró la pequeña A:

Entonces, el gerente de producto encontró la pequeña B nuevamente:

Entonces, el gerente de producto encontró la pequeña C nuevamente:

Así, una tarea se transfiere de la pequeña A a la pequeña B, de la pequeña B a la pequeña C, y finalmente la procesa la pequeña C, formando una cadena completa de procesamiento de tareas:

En la cadena anterior, hay diferentes administradores de tareas. Ante una nueva tarea, cada procesador de tareas debe juzgar si puede manejar la tarea, si puede manejarla, luego manejarla y regresar; si no puede manejarla, transfiérala al siguiente procesador de tareas hasta que un determinado procesador de tareas finalmente la complete. tratar con. Esta es la idea central del modelo de cadena de responsabilidad .


abstract public class Handler {

    protected Handler successor;

    public void setSuccessor(Handler successor) {
        this.successor = successor;
    }

    abstract String handleRequest(String msg);
}

Como se puede ver en la clase abstracta anterior, cada objeto Handler contiene un miembro sucesor, que apunta a su siguiente controlador de tareas, al igual que el siguiente puntero del nodo de lista vinculado.

public class HandlerA extends Handler {
    @Override
    String handleRequest(String msg) {
        if(msg.contains("a")){
            msg = msg.replace('a', '*');
        } else if(this.successor != null){
            msg = this.successor.handleRequest(msg);
        }
        return msg;
    }
}

public class HandlerB extends Handler {
    @Override
    String handleRequest(String msg) {
        if(msg.contains("b")){
            msg = msg.replace('b', '*');
        } else if(this.successor != null){
            msg = this.successor.handleRequest(msg);
        }
        return msg;
    }
}

public class HandlerC extends Handler {
    @Override
    String handleRequest(String msg) {
        if(msg.contains("c")){
            msg = msg.replace('c', '*');
        } else if(this.successor != null){
            msg = this.successor.handleRequest(msg);
        }
        return msg;
    }
}

En estas tres clases de implementación de Handler, se realizan juicios similares:

Si la cadena del mensaje entrante contiene una letra determinada, reemplace la letra correspondiente con *. Una vez que un Handler reemplaza la letra de la que es responsable, termina directamente el enlace completo; si no hay una letra de la que sea responsable, se asigna el siguiente Handler para continuar con el procesamiento.

public class Client {

    public static void main(String[] args) {
        Handler handlerA = new HandlerA();
        Handler handlerB = new HandlerB();
        Handler handlerC = new HandlerC();

        handlerA.setSuccessor(handlerB);
        handlerB.setSuccessor(handlerC);

        System.out.println(handlerA.handleRequest("apple"));
        System.out.println(handlerA.handleRequest("bicycle"));
        System.out.println(handlerA.handleRequest("color"));
    }
}

En el código del cliente, puede establecer de manera flexible el orden de todo el enlace y el procesador, y luego llamar directamente al método handleRequest del primer procesador, que equivale a iniciar el enlace completo.


Los amigos que han realizado desarrollo web saben que cuando un cliente envía una solicitud HTTP a una aplicación web, primero pasará por la capa de filtros (Filter) del contenedor Tomcat . El filtro se basará en los derechos de acceso solicitados, legalidad de los parámetros, etc. Los aspectos se verifican y filtran.

La realización de esta capa de filtros utiliza el modelo de cadena de responsabilidad.

Los amigos que están familiarizados con el código fuente del marco SpringMVC deben saber que después de que la solicitud HTTP del cliente llegue a la aplicación web, será distribuida por la clase DispatcherServlet del marco SpringMVC y distribuida a los métodos específicos de la capa del controlador.

Antes de ingresar a la lógica de negocios de la capa de Controlador y luego de ejecutar la lógica de negocios, la solicitud pasará por una serie de Interceptores . El flujo de procesamiento de esta serie de interceptores es también la realización del modelo de cadena de responsabilidad.

-----FIN-----

Amigos a los que les gusta este artículo, bienvenidos a seguir al programador de cuentas oficial  Xiaohui y ver contenido más emocionante.

点个[在看],是对小灰最大的支持!

Supongo que te gusta

Origin blog.csdn.net/bjweimengshu/article/details/110016220
Recomendado
Clasificación