- Uzorak lanca odgovornosti
- Prednost lanca odgovornosti DP
- Korištenje lanca odgovornosti DP
- UML lanca odgovornosti DP
- Primjer lanca odgovornosti DP
U lancu odgovornosti pošiljatelj šalje zahtjev lancu objekata. Zahtjev može obraditi bilo koji objekt u lancu.
Uzorak lanca odgovornosti kaže da samo 'izbjegavajte spajanje pošiljatelja zahtjeva s njegovim primateljem dajući višestrukim objektima priliku da obrade zahtjev'. Na primjer, bankomat koristi obrazac dizajna lanca odgovornosti u procesu davanja novca.
Drugim riječima, možemo reći da obično svaki prijemnik sadrži referencu drugog prijemnika. Ako jedan objekt ne može obraditi zahtjev, prosljeđuje isti sljedećem primatelju i tako dalje.
Prednost obrasca lanca odgovornosti
- Smanjuje spoj.
- Dodaje fleksibilnost pri dodjeljivanju odgovornosti objektima.
- Omogućuje da skup klasa djeluje kao jedna; događaji proizvedeni u jednoj klasi mogu se poslati drugim klasama rukovatelja uz pomoć kompozicije.
Korištenje obrasca lanca odgovornosti:
Koristi se:
parcijalni derivati u lateksu
- Kada više od jednog objekta može obraditi zahtjev, a rukovatelj je nepoznat.
- Kada se grupa objekata koja može obraditi zahtjev mora specificirati na dinamički način.
Primjer obrasca lanca odgovornosti
Razmotrimo primjer uzorka lanca odgovornosti pomoću gornjeg UML dijagrama.
UML za obrazac lanca odgovornosti:
Implementacija gornjeg UML-a:
Korak 1
Stvoriti Drvosječa apstraktna klasa.
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. korak
Stvoriti DebugBasedLogger razreda.
niz za sortiranje u JaviDatoteka: DebugBasedLogger.java
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.
Korak 4
Stvoriti ErrorBasedLogger razreda.
Datoteka: 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.
Korak 5
Stvoriti ChainOfResponsibilityClient razreda.
Datoteka: 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'); } }
preuzmite ovaj primjer
Izlaz
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){>