logo

Atsakomybės grandinės modelis

  1. Atsakomybės grandinės modelis
  2. Atsakomybės grandinės DP pranašumas
  3. Atsakomybės grandinės DP naudojimas
  4. UML atsakomybės grandinės DP
  5. DP atsakomybės grandinės pavyzdys

Atsakomybės grandinėje siuntėjas siunčia užklausą objektų grandinei. Užklausą gali apdoroti bet kuris grandinės objektas.

Atsakomybės grandinės modelis sako, kad tiesiog „venkite susieti užklausos siuntėją su jos gavėju, suteikiant galimybę keliems objektams apdoroti užklausą“. Pavyzdžiui, pinigų teikimo procese bankomatas naudoja atsakomybės grandinės dizaino modelį.

Kitaip tariant, galime pasakyti, kad paprastai kiekviename imtuve yra kito imtuvo nuoroda. Jei vienas objektas negali apdoroti užklausos, jis perduoda tą patį kitam gavėjui ir pan.


Atsakomybės grandinės modelio pranašumas

  • Tai sumažina sujungimą.
  • Tai suteikia lankstumo priskiriant objektams atsakomybę.
  • Tai leidžia klasių rinkiniui veikti kaip vienai; Vienoje klasėje sukurti įvykiai kompozicijos pagalba gali būti siunčiami kitoms tvarkytojų klasėms.

Atsakomybės grandinės modelio naudojimas:

Jis naudojamas:

skirtumas tarp dvejetainio medžio ir dvejetainio paieškos medžio
  • Kai užklausą gali apdoroti daugiau nei vienas objektas, o tvarkytojas nežinomas.
  • Kai objektų grupė, galinti apdoroti užklausą, turi būti nurodyta dinamiškai.

Atsakomybės grandinės modelio pavyzdys

Supraskime atsakomybės grandinės modelio pavyzdį pagal aukščiau pateiktą UML diagramą.

UML atsakomybės grandinės modeliui:

Aukščiau pateikto UML įgyvendinimas:

1 žingsnis

Sukurti Kirtėjas abstrakti klasė.

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

3 veiksmas

Sukurti DebugBasedLogger klasė.

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

4 veiksmas

Sukurti ErrorBasedLogger klasė.

Linux pervardyti katalogą
Failas: 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. 

5 veiksmas

Sukurti „ChainOfResponsibilityClient“. klasė.

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

atsisiųskite šį pavyzdį

Išvestis

 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