logo

Modelul Lanțului de Responsabilitate

  1. Modelul Lanțului de Responsabilitate
  2. Avantajul lanțului de responsabilitate DP
  3. Utilizarea lanțului de responsabilitate DP
  4. UML de Chain Of Responsibility DP
  5. Exemplu de lanț de responsabilitate DP

În lanț de responsabilitate, expeditorul trimite o cerere către un lanț de obiecte. Cererea poate fi gestionată de orice obiect din lanț.

Un model de lanț de responsabilitate spune că doar „evitați să cuplați expeditorul unei cereri la receptorul acesteia, oferind mai multor obiecte șansa de a gestiona cererea”. De exemplu, un bancomat folosește modelul de proiectare a Lanțului de responsabilitate în procesul de acordare a banilor.

Cu alte cuvinte, putem spune că, în mod normal, fiecare receptor conține referință la un alt receptor. Dacă un obiect nu poate gestiona cererea, atunci acesta îl transmite următorului receptor și așa mai departe.


Avantajul modelului de lanț de responsabilitate

  • Reduce cuplarea.
  • Adaugă flexibilitate în timp ce atribuie responsabilități obiectelor.
  • Permite unui set de clase să acționeze ca una; evenimentele produse într-o clasă pot fi trimise la alte clase de handler cu ajutorul compoziției.

Utilizarea modelului de lanț de responsabilitate:

Este folosit:

furnică vs maven
  • Când mai multe obiecte pot gestiona o solicitare și handlerul este necunoscut.
  • Când grupul de obiecte care poate gestiona cererea trebuie specificat în mod dinamic.

Exemplu de model de lanț de responsabilitate

Să înțelegem exemplul de Chain of Responsibility Pattern din diagrama UML de mai sus.

Descărcați videoclipuri de pe youtube vlc

UML pentru modelul de lanț de responsabilitate:

Implementarea UML de mai sus:

Pasul 1

Creeaza o Logger clasa abstractă.

 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){>

Pasul 3

Creeaza o DebugBasedLogger clasă.

Fișier: 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. 

Pasul 4

Creeaza o ErrorBasedLogger clasă.

Fișier: 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. 

Pasul 5

Creeaza o ChainOfResponsibilityClient clasă.

Fișier: 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;); } } 

descărcați acest exemplu

Ieșire

 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