logo

Patrón de cadena de responsabilidad

  1. Patrón de cadena de responsabilidad
  2. Ventaja de la cadena de responsabilidad DP
  3. Uso de la cadena de responsabilidad DP
  4. UML de Cadena de Responsabilidad DP
  5. Ejemplo de Cadena de Responsabilidad DP

En la cadena de responsabilidad, el remitente envía una solicitud a una cadena de objetos. La solicitud puede ser manejada por cualquier objeto de la cadena.

Un patrón de cadena de responsabilidad dice que solo 'evite acoplar el remitente de una solicitud a su receptor dando a múltiples objetos la oportunidad de manejar la solicitud'. Por ejemplo, un cajero automático utiliza el patrón de diseño de la Cadena de Responsabilidad en el proceso de entrega de dinero.

En otras palabras, podemos decir que normalmente cada receptor contiene referencia de otro receptor. Si un objeto no puede manejar la solicitud, la pasa al siguiente receptor y así sucesivamente.


Ventaja del patrón de cadena de responsabilidad

  • Reduce el acoplamiento.
  • Agrega flexibilidad al asignar responsabilidades a los objetos.
  • Permite que un conjunto de clases actúen como una sola; Los eventos producidos en una clase se pueden enviar a otras clases de controlador con la ayuda de la composición.

Uso del patrón de cadena de responsabilidad:

Esta usado:

centos vs rhel
  • Cuando más de un objeto puede manejar una solicitud y se desconoce el controlador.
  • Cuando se debe especificar de forma dinámica el grupo de objetos que pueden manejar la solicitud.

Ejemplo de patrón de cadena de responsabilidad

Entendamos el ejemplo del patrón de cadena de responsabilidad mediante el diagrama UML anterior.

ventajas y desventajas de la tecnología

UML para el patrón de cadena de responsabilidad:

Implementación del UML anterior:

Paso 1

Crear un registrador clase abstracta.

 public abstract class Logger { public static int OUTPUTINFO=1; public static int ERRORINFO=2; public static int DEBUGINFO=3; protected int levels; protected Logger nextLevelLogger; public void setNextLevelLogger(Logger nextLevelLogger) { this.nextLevelLogger = nextLevelLogger; } public void logMessage(int levels, String msg){ if(this.levels<=levels){ displayloginfo(msg); } if (nextlevellogger!="null)" { nextlevellogger.logmessage(levels, msg); protected abstract void displayloginfo(string < pre> <h4>Step 2</h4> <p> Create a <b>ConsoleBasedLogger</b> class.</p> File: ConsoleBasedLogger.java <pre> public class ConsoleBasedLogger extends Logger { public ConsoleBasedLogger(int levels) { this.levels=levels; } @Override protected void displayLogInfo(String msg) { System.out.println(&apos;CONSOLE LOGGER INFO: &apos;+msg); } } </pre> <h4>Step 3</h4> <p>Create a <b>DebugBasedLogger</b> class.</p> File: DebugBasedLogger.java <pre> public class DebugBasedLogger extends Logger { public DebugBasedLogger(int levels) { this.levels=levels; } @Override protected void displayLogInfo(String msg) { System.out.println(&apos;DEBUG LOGGER INFO: &apos;+msg); } }// End of the DebugBasedLogger class. </pre> <h4>Step 4</h4> <p>Create a <b>ErrorBasedLogger</b> class.</p> File: ErrorBasedLogger.java <pre> public class ErrorBasedLogger extends Logger { public ErrorBasedLogger(int levels) { this.levels=levels; } @Override protected void displayLogInfo(String msg) { System.out.println(&apos;ERROR LOGGER INFO: &apos;+msg); } }// End of the ErrorBasedLogger class. </pre> <h4>Step 5</h4> <p>Create a <b>ChainOfResponsibilityClient</b> class.</p> File: ChainofResponsibilityClient.java <pre> public class ChainofResponsibilityClient { private static Logger doChaining(){ Logger consoleLogger = new ConsoleBasedLogger(Logger.OUTPUTINFO); Logger errorLogger = new ErrorBasedLogger(Logger.ERRORINFO); consoleLogger.setNextLevelLogger(errorLogger); Logger debugLogger = new DebugBasedLogger(Logger.DEBUGINFO); errorLogger.setNextLevelLogger(debugLogger); return consoleLogger; } public static void main(String args[]){ Logger chainLogger= doChaining(); chainLogger.logMessage(Logger.OUTPUTINFO, &apos;Enter the sequence of values &apos;); chainLogger.logMessage(Logger.ERRORINFO, &apos;An error is occured now&apos;); chainLogger.logMessage(Logger.DEBUGINFO, &apos;This was the error now debugging is compeled&apos;); } } </pre> <hr> download this example <h4>Output</h4> <pre> bilityClient CONSOLE LOGGER INFO: Enter the sequence of values CONSOLE LOGGER INFO: An error is occured now ERROR LOGGER INFO: An error is occured now CONSOLE LOGGER INFO: This was the error now debugging is compeled ERROR LOGGER INFO: This was the error now debugging is compeled DEBUG LOGGER INFO: This was the error now debugging is compeled </pre></=levels){>

Paso 3

Crear un Registrador basado en depuración clase.

Archivo: DebugBasedLogger.java
 public class DebugBasedLogger extends Logger { public DebugBasedLogger(int levels) { this.levels=levels; } @Override protected void displayLogInfo(String msg) { System.out.println(&apos;DEBUG LOGGER INFO: &apos;+msg); } }// End of the DebugBasedLogger class. 

Etapa 4

Crear un Registrador basado en errores clase.

Archivo: ErrorBasedLogger.java
 public class ErrorBasedLogger extends Logger { public ErrorBasedLogger(int levels) { this.levels=levels; } @Override protected void displayLogInfo(String msg) { System.out.println(&apos;ERROR LOGGER INFO: &apos;+msg); } }// End of the ErrorBasedLogger class. 

Paso 5

Crear un CadenaDeResponsabilidadCliente clase.

Archivo: ChainofResponsibilityClient.java
 public class ChainofResponsibilityClient { private static Logger doChaining(){ Logger consoleLogger = new ConsoleBasedLogger(Logger.OUTPUTINFO); Logger errorLogger = new ErrorBasedLogger(Logger.ERRORINFO); consoleLogger.setNextLevelLogger(errorLogger); Logger debugLogger = new DebugBasedLogger(Logger.DEBUGINFO); errorLogger.setNextLevelLogger(debugLogger); return consoleLogger; } public static void main(String args[]){ Logger chainLogger= doChaining(); chainLogger.logMessage(Logger.OUTPUTINFO, &apos;Enter the sequence of values &apos;); chainLogger.logMessage(Logger.ERRORINFO, &apos;An error is occured now&apos;); chainLogger.logMessage(Logger.DEBUGINFO, &apos;This was the error now debugging is compeled&apos;); } } 

descarga este ejemplo

Producción

 bilityClient CONSOLE LOGGER INFO: Enter the sequence of values CONSOLE LOGGER INFO: An error is occured now ERROR LOGGER INFO: An error is occured now CONSOLE LOGGER INFO: This was the error now debugging is compeled ERROR LOGGER INFO: This was the error now debugging is compeled DEBUG LOGGER INFO: This was the error now debugging is compeled