JavaScript 16 Modo de cadena de responsabilidad de 23 patrones de diseño

JavaScript 16 Modo de cadena de responsabilidad de 23 patrones de diseño

Concepto y caracteristicas

Concepto: El
modelo de cadena de responsabilidad se refiere a una cadena de objetos que pueden procesar solicitudes. Cuando ocurre una solicitud, la solicitud se pasa a lo largo de esta cadena hasta que se procesa un objeto.

caracteristicas:

  1. Desacople el remitente de la solicitud y el controlador de la solicitud.
  2. Para mejorar la escalabilidad del sistema, es conveniente agregar nuevas clases de procesamiento de solicitudes, lo que se ajusta al principio de apertura y cierre.
  3. Mayor flexibilidad en la asignación de responsabilidades a los objetos. Cuando cambia el flujo de trabajo, puede cambiar dinámicamente los miembros de la cadena o movilizar su orden.
  4. La cadena de responsabilidad simplifica la conexión entre objetos y cada objeto conserva solo una referencia a su sucesor. Evite numerosos if ... else.
  5. Compartiendo la responsabilidad, cada clase solo maneja el trabajo que ha cambiado. El trabajo que no se cambia se pasa al siguiente objeto para su finalización. Cumplir con el principio de responsabilidad única.

Estructura y realización

El modelo de cadena de responsabilidad tiene controladores abstractos, controladores concretos y clases de clientes.
Controlador abstracto: defina una interfaz para procesar solicitudes, incluidos los métodos de procesamiento abstracto y una conexión posterior.
Procesador concreto: Implementa el método abstracto del procesador abstracto para determinar si la solicitud se puede procesar y transferirla al sucesor si no se puede procesar.
Clase de cliente: cree una cadena de procesamiento y envíe una solicitud para el objeto de procesamiento específico a la cabeza de la cadena. No te preocupes por los detalles del procesamiento y el proceso de entrega de la solicitud.

Caso: Implementar un proceso de aprobación de solicitudes de estudiantes. Cuando el número de días de licencia es menor o igual a 2 días, es aprobado por el director; cuando el número de días de licencia es menor o igual a 7 días, es aprobado por el jefe de departamento; cuando el número de días de licencia es menor o igual a 10 días, es aprobado por el decano.

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8"/>
    <title>React App</title>
</head>
<body>
<script>
    class Leader{
    
    
        setLeader(leader){
    
    
            this.leader = leader;
        }
        getLeader(){
    
    
            return this.leader;
        }
        handlerRequest(leaveDay){
    
    

        }
    }
    class Adviser extends Leader{
    
    
        handlerRequest(leaveDay){
    
    
            if(leaveDay <= 2){
    
    
                console.log('班主任批准'+leaveDay+"天")
            }else {
    
    
                if(this.getLeader()!==null){
    
    
                    this.getLeader().handlerRequest(leaveDay)
                }else {
    
    
                    console.log('请假天数太多,没有人批准该假条!');
                }
            }
        }
    }
    class DepartmentHead extends Leader{
    
    
        handlerRequest(leaveDay){
    
    
            if(leaveDay <= 7){
    
    
                console.log('系主任批准'+leaveDay+"天")
            }else {
    
    
                if(this.getLeader()!==null){
    
    
                    this.getLeader().handlerRequest(leaveDay)
                }else {
    
    
                    console.log('请假天数太多,没有人批准该假条!');
                }
            }
        }
    }
    class Dean extends Leader{
    
    
        handlerRequest(leaveDay){
    
    
            if(leaveDay <= 10){
    
    
                console.log('院长批准'+leaveDay+"天")
            }else {
    
    
                if(this.getLeader()!==null){
    
    
                    this.getLeader().handlerRequest(leaveDay)
                }else {
    
    
                    console.log('请假天数太多,没有人批准该假条!');
                }
            }
        }
    }
    class Customer{
    
    
        static main(){
    
    
            let handler1 = new Adviser();
            let handler2 = new DepartmentHead();
            let handler3 = new Dean();
            handler1.setLeader(handler2);
            handler2.setLeader(handler3);
            handler1.handlerRequest(5);
        }
    }
    Customer.main();
</script>
</body>
</html>

Escenarios de aplicación

  1. Hay varios objetos que pueden manejar una solicitud, y el tiempo de ejecución determina qué objeto maneja la solicitud.
  2. Puede especificar dinámicamente un grupo de objetos para procesar la solicitud o agregar un nuevo controlador.
  3. Si el procesador de solicitudes no se especifica claramente, envíe la solicitud a uno de los múltiples procesadores.

Aplicaciones

Nada.

para resumir

El modelo de cadena de responsabilidad es muy adecuado para escenarios de aplicación similares al [proceso de aprobación]. Es muy conveniente transferir nodos capa por capa. Los usuarios del proceso no necesitan prestar atención al proceso específico de realización o entrega del proceso. Desacople bien al usuario de la persona que llama.

[Clase de procesamiento abstracto]:
1. Proporcione los métodos setNext y getNext para configurar y obtener la siguiente clase de procesamiento específica.

[Categoría de procesamiento específica]:
1. Determine si los parámetros comerciales procesan la solicitud; de lo contrario, se transfieren al siguiente procesador.

[Clase de cliente]:
1. Cree una instancia de cada clase de procesamiento específica y transfiérala al siguiente procesador sucesivamente a través de setNext.
2. Pase los parámetros comerciales y llame al método de solicitud del primer procesador.

Supongo que te gusta

Origin blog.csdn.net/weixin_44135121/article/details/106017545
Recomendado
Clasificación