logo

Wzór łańcucha odpowiedzialności

  1. Wzór łańcucha odpowiedzialności
  2. Zaleta łańcucha odpowiedzialności DP
  3. Stosowanie łańcucha odpowiedzialności DP
  4. UML łańcucha odpowiedzialności DP
  5. Przykład łańcucha odpowiedzialności DP

W łańcuchu odpowiedzialności nadawca wysyła żądanie do łańcucha obiektów. Żądanie może zostać obsłużone przez dowolny obiekt w łańcuchu.

Wzór łańcucha odpowiedzialności właśnie to mówi „unikaj łączenia nadawcy żądania z odbiorcą, dając wielu obiektom szansę na obsługę żądania”. Na przykład bankomat wykorzystuje wzorzec projektowy Łańcucha Odpowiedzialności w procesie wręczania pieniędzy.

Innymi słowy, możemy powiedzieć, że zwykle każdy odbiornik zawiera odniesienie do innego odbiornika. Jeśli jeden obiekt nie może obsłużyć żądania, przekazuje je następnemu odbiorcy i tak dalej.


Zalety wzorca łańcucha odpowiedzialności

  • Zmniejsza sprzęgło.
  • Zwiększa elastyczność przy przydzielaniu obowiązków obiektom.
  • Pozwala zestawowi klas działać jako jedna; zdarzenia wytworzone w jednej klasie mogą być wysyłane do innych klas obsługi za pomocą kompozycji.

Stosowanie wzorca łańcucha odpowiedzialności:

To jest używane:

konwersja ciągu na datę
  • Gdy więcej niż jeden obiekt może obsłużyć żądanie, a procedura obsługi jest nieznana.
  • Gdy grupa obiektów mogących obsłużyć żądanie musi zostać określona w sposób dynamiczny.

Przykład wzoru łańcucha odpowiedzialności

Przyjrzyjmy się przykładowi wzorca łańcucha odpowiedzialności na powyższym diagramie UML.

UML dla wzorca łańcucha odpowiedzialności:

Implementacja powyższego UML:

Krok 1

Stwórz Rejestrator klasa abstrakcyjna.

wyjątki Javy
 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){>

Krok 3

Stwórz Rejestrator oparty na debugowaniu klasa.

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

Krok 4

Stwórz Rejestrator oparty na błędach klasa.

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

Krok 5

Stwórz Klient łańcucha odpowiedzialności klasa.

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

pobierz ten przykład

Wyjście

 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