1. ¿Qué es el modelo de cadena de responsabilidad?
modelo de cadena de responsabilidad (Patrón de cadena de responsabilidad) es un patrón de diseño de comportamiento. La definición es la siguiente:
Evite acoplar el remitente y el receptor de una solicitud y brinde a varios objetos la oportunidad de manejar la solicitud.
Conecte los objetos que reciben la solicitud en una cadena y pase la solicitud a lo largo de esta cadena hasta que un objeto pueda manejarla.
2. El papel del modelo de cadena de responsabilidad
Desacople las solicitudes y el procesamiento de solicitudes para mejorar la escalabilidad del código.
3. Estructura del modelo de cadena de responsabilidad
El modelo de cadena de responsabilidad incluye principalmente los siguientes roles:
Rol del controlador abstracto: Defina una interfaz para procesar solicitudes, incluidos métodos de procesamiento abstractos y una conexión posterior (cada controlador en la cadena tiene una variable miembro para guardar una referencia al siguiente controlador).
Rol de manipulador de hormigón: Implemente el método de procesamiento del procesador abstracto para determinar si la solicitud se puede procesar. Si la solicitud se puede procesar, procese; de lo contrario, la solicitud se transferirá a su sucesor.
Rol del cliente: cree una cadena de procesamiento y envíe una solicitud al objeto controlador específico al principio de la cadena. No le importan los detalles del procesamiento ni el proceso de entrega de la solicitud.
En el desarrollo real, el modelo de cadena de responsabilidad puede agregar un administrador de cadena de responsabilidad para administrar procesadores específicos.
4. Aplicación del modelo de cadena de responsabilidad en el desarrollo real.
En SpringBoot, hay muchas formas de practicar el patrón de cadena de responsabilidad. El siguiente es un ejemplo: lógica de verificación independiente múltiple para un proceso de pedido.
4.1 Método de implementación 1
Crear Pojo, ordenar objeto
publicclassOrderContext{privateString seqId;privateString userId;privateLong skuId;privateInteger amount;privateString userAddressId;// Getters and setters}