Mi informacion de contacto
Correo[email protected]
2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
El patrón de cadena de responsabilidad es un patrón de diseño de comportamiento que permite que varios objetos manejen solicitudes en secuencia, y cada objeto puede elegir si manejar la solicitud o pasarla al siguiente objeto. Este patrón proporciona mayor flexibilidad y escalabilidad al desacoplar el remitente y el receptor de solicitudes. La siguiente es una introducción detallada al modelo de cadena de responsabilidad:
El núcleo del modelo de cadena de responsabilidad es diseñar una cadena de solicitudes y una identificación del final de la cadena. Conecta múltiples objetos de manejo de solicitudes en una cadena y permite que la solicitud pase a través de la cadena hasta que un objeto en la cadena decida manejar la solicitud. El cliente que realiza la solicitud no sabe qué objeto de la cadena manejará finalmente la solicitud, lo que permite que el sistema se reorganice dinámicamente y asigne responsabilidades sin afectar al cliente.
Diagrama de clase:
El modelo de cadena de responsabilidad incluye principalmente los siguientes roles:
Controlador abstracto (Manejador) : Defina una interfaz para procesar solicitudes. Si es necesario, la interfaz puede definir un método para configurar y devolver una referencia a la siguiente interfaz. Esta función generalmente se implementa mediante una clase o interfaz abstracta.
Manipulador de hormigón : Después de recibir la solicitud, el procesador específico puede optar por procesar la solicitud o pasarla a la siguiente parte. Dado que el procesador de concreto tiene una referencia a la siguiente casa, el procesador de concreto puede acceder a la siguiente casa si es necesario.
Clase de cliente (Cliente): Cree una cadena de procesamiento y envíe una solicitud al objeto de procesador específico del encabezado de la cadena.
El modelo de cadena de responsabilidad es adecuado para los siguientes escenarios:
Varios objetos procesan conjuntamente una tarea: Por ejemplo, un sistema de aprobación de varios niveles pasa la solicitud de aprobación al siguiente nivel de aprobador según la autoridad y el nivel del aprobador hasta que se obtiene el resultado de aprobación final.
Flujo de procesamiento de combinación dinámica: Al configurar de manera flexible la cadena de responsabilidad, los objetos de procesamiento se pueden combinar dinámicamente para implementar diferentes procesos de procesamiento.
Evite el acoplamiento directo entre el remitente y el receptor de una solicitud: Al pasar la solicitud a la cadena de responsabilidad, el remitente de la solicitud no necesita conocer el objeto de procesamiento específico, lo que reduce la dependencia entre objetos.
El modelo de cadena de responsabilidad se utiliza ampliamente en muchos campos, incluidos, entre otros:
El siguiente es un ejemplo de implementación simple del patrón de cadena de responsabilidad, que se utiliza para procesar mensajes de registro y pasar los mensajes a diferentes procesadores según el nivel de registro (como DEBUG, INFO, WARN, ERROR):
- // 抽象处理者
- abstract class LogHandler {
- protected int level;
- protected LogHandler nextHandler;
-
- public void setNextHandler(LogHandler nextHandler) {
- this.nextHandler = nextHandler;
- }
-
- //这个是精髓:他除了处理自己的逻辑,还会调用nextHandler进行处理
- public void logMessage(int level, String message) {
- if (this.level <= level) {
- write(message);
- }
- if (nextHandler != null) {
- nextHandler.logMessage(level, message);
- }
- }
-
- abstract protected void write(String message);
- }
-
- // 具体处理者:ErrorLogHandler
- class ErrorLogHandler extends LogHandler {
- public ErrorLogHandler(int level) {
- this.level = level;
- }
-
- @Override
- protected void write(String message) {
- System.out.println("ErrorLogHandler: " + message);
- }
- }
-
- // 具体处理者:WarnLogHandler
- class WarnLogHandler extends LogHandler {
- public WarnLogHandler(int level) {
- this.level = level;
- }
-
- @Override
- protected void write(String message) {
- System.out.println("WarnLogHandler: " + message);
- }
- }
-
- // 具体处理者:InfoLogHandler
- class InfoLogHandler extends LogHandler {
- public InfoLogHandler(int level) {
- this.level = level;
- }
-
- @Override
- protected void write(String message) {
- System.out.println("InfoLogHandler: " + message);
- }
- }
-
- // 客户端代码
- public class ChainPatternDemo {
- private static LogHandler getChainOfLoggers() {
- // 创建链中的处理者
- LogHandler errorLogHandler = new ErrorLogHandler(3);
-
- LogHandler warnLogHandler = new WarnLogHandler(2);
- warnLogHandler.setNextHandler(errorLogHandler);
-
- LogHandler infoLogHandler = new InfoLogHandler(1);
- infoLogHandler.setNextHandler(warnLogHandler);
-
- return infoLogHandler;
- }
-
- public static void main(String[] args) {
- LogHandler loggerChain = getChainOfLoggers();
-
- loggerChain.logMessage(1, "This is an informational message.");
- loggerChain.logMessage(2, "This is a warning message.");
- loggerChain.logMessage(3, "This is an error message.");
- }
- }
En este ejemplo, definimos tres clases concretas de controlador de registros (ErrorLogHandler
、WarnLogHandler
、InfoLogHandler
), manejan diferentes niveles de mensajes de registro respectivamente. Cada controlador contiene un nivel (level
), utilizado para determinar si se deben procesar mensajes de este nivel.LlamandologMessage
método, la solicitud se pasa al primer controlador de la cadena (infoLogHandler
), decide si procesar el mensaje en función de su propio nivel y lógica de procesamiento y luego (si no se procesa) pasa la solicitud al siguiente procesador de la cadena. Este proceso continúa hasta el final de la cadena o hasta que se procese la solicitud.
Tenga en cuenta que en una aplicación real, es posible que necesiteLogHandler
La clase agrega más métodos y propiedades para admitir una configuración y una lógica de procesamiento de registros más complejas. Además, los niveles de registro suelen utilizar enumeraciones (enum
) en lugar de números enteros para mejorar la legibilidad y el mantenimiento del código.
El patrón de cadena de responsabilidad logra un procesamiento flexible de solicitudes y escalabilidad del sistema al conectar múltiples objetos que manejan solicitudes en una cadena y permitir que la solicitud pase a través de la cadena hasta que un objeto en la cadena decida manejar la solicitud.
Si el modelo de cadena de responsabilidad te resulta útil, recuerda darle me gusta y recopilarlo.