Patrón de diseño 10 patrón de cadena de responsabilidad

antecedentes

Tenemos tal escenario, si necesita un reembolso en un viaje de negocios. Los aprobadores de su formulario de reembolso son: gerente de proyecto, director de departamento, jefe de departamento y oficial financiero. Por supuesto, no necesita saber el nombre, número de teléfono, dirección de la oficina y otra información de cada aprobador. No es necesario que acuda a estos aprobadores uno por uno para su aprobación.

Una solución común es que usted inicia una solicitud de aprobación, su gerente de proyecto la envía al director del departamento después de la aprobación, el director del departamento la envía al jefe del departamento después de la aprobación y la persona a cargo del departamento la envía a la persona a cargo de finanzas para su aprobación. De esta manera, solo necesita iniciar una solicitud y no necesita preocuparse por la aprobación posterior.

Que es el modelo de cadena de responsabilidad

"

Evite acoplar el remitente de una solicitud a su receptor dando a más de un objeto la oportunidad de manejar la solicitud. Encadene los objetos receptores y pase la solicitud a lo largo de la cadena hasta que un objeto la maneje. ( , Evitando así la relación de acoplamiento entre el remitente y el receptor de la solicitud. Conecte estos objetos en una cadena y pase la solicitud a lo largo de esta cadena hasta que haya un objeto para procesarla).

"

El modelo de cadena de responsabilidad tiene ventajas obvias: reduce el acoplamiento entre el objeto de solicitud y el objeto de procesamiento, el objeto de procesamiento es fácil de expandir y se mejora la flexibilidad de asignación de objetos de procesamiento.

La cadena de responsabilidad simplifica la conexión entre objetos. Cada objeto solo necesita mantener una referencia a su sucesor y no necesita mantener una referencia a todos los demás procesadores, lo que evita el uso de numerosas declaraciones if o if ... else.

Estructura de cadena

El modelo de cadena de responsabilidad consta principalmente de 3 elementos:

"
  • Función de controlador abstracto (controlador): Defina una interfaz para procesar solicitudes, incluidos los métodos de procesamiento abstracto y una conexión posterior.

  • Rol del manejador concreto: Implementar el método de procesamiento del manejador abstracto, para determinar si la solicitud puede ser procesada, y si puede manejar la solicitud, será procesada; de lo contrario, la solicitud se reenviará a su sucesor.

  • Rol del cliente: cree una cadena de procesamiento y envíe una solicitud al objeto controlador específico que se encuentra a la cabeza de la cadena. No se preocupan por los detalles del procesamiento y el proceso de entrega de la solicitud.

"

El diagrama de estructura es el siguiente:

Diagrama de estructura de la cadena de responsabilidad

Código

Manipulador

Defina una clase de ejecución abstracta, que tiene un método abstracto para procesar solicitudes.

ConcreteHandler1

HandlerDe la misma manera, podemos extender esta clase de implementación ConcreteHandler2.

El código de prueba es el siguiente:

Resultados de la prueba:

具体处理者2负责处理该请求!

Opiniones sobre el modelo de cadena de responsabilidad

Entonces, ¿cuándo deberíamos utilizar el modelo de cadena de responsabilidad de manera adecuada?

Por lo general, si varios objetos manejan una solicitud, la llamada real determina qué objeto debe usarse. En este escenario, podemos usar el modo de llamada.

Si ha desarrollado un sistema de gestión, ¿alguna vez ha desarrollado una función de aprobación de procesos? Puede pensar si puede utilizar el modelo de cadena de responsabilidad en este sentido.

Además, en el sistema de pedidos, ¿es mejor utilizar este patrón de diseño en el procesamiento del estado del pedido?

Sin embargo, cabe señalar que en el objeto se utiliza el método recursivo, si el enlace es largo, tendrá un cierto impacto en el rendimiento del sistema. Por lo tanto, el uso del modo de cadena de responsabilidad requiere el control de la longitud del enlace. Por ejemplo, establezca el número máximo de nodos en Handler. Si el número de nodos excede este número máximo, no se permite el establecimiento del enlace.

En el modo de cadena de responsabilidad, cada clase de implementación solo necesita prestar atención a su propia lógica de negocio. En cuanto a lo que necesita ser manejado por sí misma, deje que la clase padre decida, es decir, la clase padre se da cuenta de la función de transmisión de solicitudes, y el hijo El procesamiento de las solicitudes de implementación de clases se ajusta al principio de responsabilidad única y cada clase de implementación solo completa una acción o lógica.

El modelo de cadena de responsabilidad puede expandir bien los nodos. Este es un escenario, como el desarrollo de un sistema de aprobación de reembolsos. Al principio, simplemente lo desarrolló siempre que el gerente del proyecto lo reembolsara. Sin embargo, la situación real es que el monto del reembolso es demasiado grande, el gerente del proyecto ya no puede ser el maestro y el gerente del departamento debe reembolsar. Si usamos el modelo de cadena de responsabilidad, podemos establecer un nuevo nodo de gerente de departamento detrás del primer procesador. Cuando realmente llame, simplemente seleccione el nodo del gerente de departamento.

Verá, este método de expansión resuelve muy bien el problema de cambiar los requisitos.

Recomendado en el pasado

Escanee el código QR para ser más emocionante. O busque Lvshen_9 en WeChat , puede responder para obtener información en segundo plano

1.回复"java" 获取java电子书;

2.回复"python"获取python电子书;

3.回复"算法"获取算法电子书;

4.回复"大数据"获取大数据电子书;

5.回复"spring"获取SpringBoot的学习视频。

6.回复"面试"获取一线大厂面试资料

7.回复"进阶之路"获取Java进阶之路的思维导图

8.回复"手册"获取阿里巴巴Java开发手册(嵩山终极版)

9.回复"总结"获取Java后端面试经验总结PDF版

10.回复"Redis"获取Redis命令手册,和Redis专项面试习题(PDF)

11.回复"并发导图"获取Java并发编程思维导图(xmind终极版)

Otro: haga clic en [ Mis beneficios ] para tener más sorpresas.

Supongo que te gusta

Origin blog.csdn.net/wujialv/article/details/109193591
Recomendado
Clasificación