logo

Muster der Verantwortungskette

  1. Muster der Verantwortungskette
  2. Vorteil der Chain of Responsibility DP
  3. Nutzung der Chain of Responsibility DP
  4. UML der Verantwortungskette DP
  5. Beispiel einer Verantwortungskette DP

In der Verantwortungskette sendet der Absender eine Anfrage an eine Objektkette. Die Anfrage kann von jedem Objekt in der Kette bearbeitet werden.

Ein Chain-of-Responsibility-Muster sagt das genau „Vermeiden Sie die Kopplung des Absenders einer Anfrage an ihren Empfänger, indem Sie mehreren Objekten die Möglichkeit geben, die Anfrage zu bearbeiten.“ Beispielsweise verwendet ein Geldautomat das Entwurfsmuster „Chain of Responsibility“ im Geldspendeprozess.

Mit anderen Worten können wir sagen, dass normalerweise jeder Empfänger eine Referenz eines anderen Empfängers enthält. Wenn ein Objekt die Anfrage nicht verarbeiten kann, gibt es sie an den nächsten Empfänger weiter und so weiter.


Vorteil des Chain-of-Responsibility-Musters

  • Es verringert die Kopplung.
  • Es erhöht die Flexibilität bei der Zuweisung der Verantwortlichkeiten zu Objekten.
  • Dadurch kann eine Reihe von Klassen als eine Einheit fungieren. In einer Klasse erzeugte Ereignisse können mithilfe der Komposition an andere Handlerklassen gesendet werden.

Verwendung des Verantwortungskettenmusters:

Es ist benutzt:

Zimt vs. Mate
  • Wenn mehr als ein Objekt eine Anfrage verarbeiten kann und der Handler unbekannt ist.
  • Wenn die Gruppe von Objekten, die die Anforderung verarbeiten können, dynamisch angegeben werden muss.

Beispiel für ein Verantwortungskettenmuster

Lassen Sie uns das Beispiel des Chain of Responsibility-Musters anhand des obigen UML-Diagramms verstehen.

UML für Chain of Responsibility-Muster:

Implementierung der oben genannten UML:

Schritt 1

Ein ... kreieren Logger abstrakte Klasse.

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

Schritt 3

Ein ... kreieren DebugBasedLogger Klasse.

Javascript if-Anweisung
Datei: 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. 

Schritt 4

Ein ... kreieren ErrorBasedLogger Klasse.

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

Schritt 5

Ein ... kreieren ChainOfResponsibilityClient Klasse.

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

Laden Sie dieses Beispiel herunter

Ausgabe

 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