logo

Vzorec reťazca zodpovednosti

  1. Vzorec reťazca zodpovednosti
  2. Výhoda reťazca zodpovednosti DP
  3. Použitie reťazca zodpovednosti DP
  4. UML RP reťazca zodpovednosti
  5. Príklad RP reťazca zodpovednosti

V reťazci zodpovednosti odosielateľ odošle požiadavku reťazcu objektov. Požiadavku môže vybaviť ktorýkoľvek objekt v reťazci.

Vzorec reťazca zodpovednosti hovorí, že práve „vyhnite sa prepojeniu odosielateľa požiadavky s jeho príjemcom tým, že dáte viacerým objektom možnosť spracovať požiadavku“. Napríklad bankomat používa vzor návrhu reťazca zodpovednosti v procese dávania peňazí.

Inými slovami, môžeme povedať, že normálne každý prijímač obsahuje referenciu iného prijímača. Ak jeden objekt nedokáže spracovať požiadavku, potom to isté odovzdá ďalšiemu príjemcovi atď.


Výhoda vzoru reťazca zodpovednosti

  • Znižuje spojku.
  • Pridáva flexibilitu pri priraďovaní zodpovedností k objektom.
  • Umožňuje množine tried pôsobiť ako jedna; udalosti vytvorené v jednej triede môžu byť odoslané do iných tried handlerov pomocou kompozície.

Použitie vzoru reťazca zodpovednosti:

Je to použité:

hibernovať dialekt
  • Keď žiadosť môže spracovať viac ako jeden objekt a obsluha je neznáma.
  • Keď skupina objektov, ktoré môžu spracovať požiadavku, musí byť špecifikovaná dynamicky.

Príklad vzoru reťazca zodpovednosti

Pochopme príklad vzoru zodpovednosti podľa vyššie uvedeného diagramu UML.

UML pre vzor reťazca zodpovednosti:

Implementácia vyššie uvedeného UML:

Krok 1

Vytvor Logger abstraktná trieda.

zásobníky 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){>

Krok 3

Vytvor DebugBasedLogger trieda.

Súbor: 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

Vytvor ErrorBasedLogger trieda.

Súbor: 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

Vytvor ChainOfResponsibilityClient trieda.

Súbor: 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;); } } 

stiahnite si tento príklad

Výkon

 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