logo

Patroon van verantwoordelijkheidsketen

  1. Patroon van verantwoordelijkheidsketen
  2. Voordeel van ketenverantwoordelijkheid DP
  3. Gebruik van ketenverantwoordelijkheid DP
  4. UML van ketenverantwoordelijkheid DP
  5. Voorbeeld van ketenverantwoordelijkheid DP

Bij keten van verantwoordelijkheid stuurt de afzender een verzoek naar een keten van objecten. Het verzoek kan door elk object in de keten worden afgehandeld.

Een keten van verantwoordelijkheidspatroon zegt dat terecht 'Vermijd het koppelen van de zender van een verzoek aan zijn ontvanger door meerdere objecten de kans te geven het verzoek af te handelen'. Een geldautomaat gebruikt bijvoorbeeld het Chain of Responsibility-ontwerppatroon bij het geven van geld.

Met andere woorden, we kunnen zeggen dat normaal gesproken elke ontvanger een referentie van een andere ontvanger bevat. Als een object het verzoek niet kan verwerken, geeft het hetzelfde door aan de volgende ontvanger, enzovoort.


Voordeel van het ketenverantwoordelijkheidspatroon

  • Het vermindert de koppeling.
  • Het voegt flexibiliteit toe bij het toewijzen van de verantwoordelijkheden aan objecten.
  • Het maakt het mogelijk dat een reeks klassen als één geheel fungeert; gebeurtenissen die in één klasse worden geproduceerd, kunnen met behulp van compositie naar andere afhandelingsklassen worden verzonden.

Gebruik van ketenverantwoordelijkheidspatroon:

Het is gebruikt:

Kali Linux-terminal
  • Wanneer meer dan één object een verzoek kan afhandelen en de handler onbekend is.
  • Wanneer de groep objecten die het verzoek kan afhandelen, op een dynamische manier moet worden opgegeven.

Voorbeeld van een keten van verantwoordelijkheidspatroon

Laten we het voorbeeld van het Chain of Responsibility-patroon begrijpen aan de hand van het bovenstaande UML-diagram.

UML voor ketenverantwoordelijkheidspatroon:

Implementatie van bovenstaande UML:

Stap 1

Maak een Logger abstracte klasse.

klasse versus object-Java
 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){>

Stap 3

Maak een DebugBasedLogger klas.

Bestand: 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. 

Stap 4

Maak een ErrorBasedLogger klas.

Bestand: 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. 

Stap 5

Maak een ChainOfResponsibilityClient klas.

Bestand: 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;); } } 

download dit voorbeeld

Uitvoer

 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