- Atbildības ķēdes modelis
- Atbildības ķēdes DP priekšrocības
- Atbildības ķēdes DP izmantošana
- Atbildības ķēdes DP UML
- Atbildības ķēdes DP piemērs
Atbildības ķēdē sūtītājs nosūta pieprasījumu objektu ķēdei. Pieprasījumu var apstrādāt jebkurš ķēdes objekts.
Atbildības ķēdes modelis saka, ka tikai “izvairieties no pieprasījuma sūtītāja savienošanas ar tā saņēmēju, dodot vairākiem objektiem iespēju apstrādāt pieprasījumu”. Piemēram, bankomāts naudas došanas procesā izmanto atbildības ķēdes dizaina modeli.
Citiem vārdiem sakot, mēs varam teikt, ka parasti katrs uztvērējs satur atsauci uz citu uztvērēju. Ja viens objekts nevar apstrādāt pieprasījumu, tas to pašu nodod nākamajam saņēmējam un tā tālāk.
Atbildības ķēdes modeļa priekšrocības
- Tas samazina savienojumu.
- Tas palielina elastību, vienlaikus piešķirot objektiem pienākumus.
- Tas ļauj klašu kopumam darboties kā vienam; vienā klasē radītos notikumus ar kompozīcijas palīdzību var nosūtīt citām hendleru klasēm.
Atbildības ķēdes modeļa izmantošana:
To lieto:
dfa automātu piemēri
- Ja pieprasījumu var apstrādāt vairāk nekā viens objekts un apstrādātājs nav zināms.
- Kad objektu grupa, kas var apstrādāt pieprasījumu, ir jānorāda dinamiskā veidā.
Atbildības ķēdes modeļa piemērs
Sapratīsim atbildības ķēdes modeļa piemēru, izmantojot iepriekš minēto UML diagrammu.
java do while cilpa
UML atbildības ķēdes modelim:
Iepriekš minētā UML ieviešana:
1. darbība
Izveidot a Mežizstrādnieks abstraktā klase.
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('CONSOLE LOGGER INFO: '+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('DEBUG LOGGER INFO: '+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('ERROR LOGGER INFO: '+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, 'Enter the sequence of values '); chainLogger.logMessage(Logger.ERRORINFO, 'An error is occured now'); chainLogger.logMessage(Logger.DEBUGINFO, 'This was the error now debugging is compeled'); } } </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. darbība
Izveidot a DebugBasedLogger klasē.
Fails: DebugBasedLogger.javapublic class DebugBasedLogger extends Logger { public DebugBasedLogger(int levels) { this.levels=levels; } @Override protected void displayLogInfo(String msg) { System.out.println('DEBUG LOGGER INFO: '+msg); } }// End of the DebugBasedLogger class.
4. darbība
Izveidot a ErrorBasedLogger klasē.
Fails: ErrorBasedLogger.javapublic class ErrorBasedLogger extends Logger { public ErrorBasedLogger(int levels) { this.levels=levels; } @Override protected void displayLogInfo(String msg) { System.out.println('ERROR LOGGER INFO: '+msg); } }// End of the ErrorBasedLogger class.
5. darbība
Izveidot a ChainOfResponsibilityClient klasē.
Fails: ChainofResponsibilityClient.javapublic 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, 'Enter the sequence of values '); chainLogger.logMessage(Logger.ERRORINFO, 'An error is occured now'); chainLogger.logMessage(Logger.DEBUGINFO, 'This was the error now debugging is compeled'); } }
lejupielādējiet šo piemēru
Izvade
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=levels){>