- Felelősségi lánc minta
- A felelősségi lánc DP előnyei
- A felelősségi lánc DP használata
- A felelősségi lánc DP UML
- Példa a felelősségi láncra DP
A felelősségi láncban a feladó kérelmet küld egy objektumláncnak. A kérést a lánc bármely objektuma kezelheti.
A felelősségi lánc minta azt mondja, hogy csak „kerülje a kérés küldőjének és a fogadójának összekapcsolását azáltal, hogy több objektumnak ad lehetőséget a kérés kezelésére”. Például egy ATM a felelősségi lánc tervezési mintáját használja a pénznyújtási folyamatban.
Más szavakkal, azt mondhatjuk, hogy általában minden vevő tartalmaz egy másik vevő referenciáját. Ha az egyik objektum nem tudja kezelni a kérést, akkor ugyanazt továbbítja a következő fogadónak, és így tovább.
A felelősségi lánc minta előnyei
- Csökkenti a kapcsolást.
- Rugalmasságot biztosít, miközben a felelősségeket az objektumokhoz rendeli.
- Lehetővé teszi, hogy az osztályok egyként működjenek; Az egyik osztályban előállított események kompozíció segítségével továbbíthatók más kezelő osztályokhoz.
A felelősségi lánc minta használata:
Használt:
vezérlési struktúrák python
- Ha egynél több objektum képes kezelni egy kérést, és a kezelő ismeretlen.
- Mikor kell dinamikusan megadni a kérést kezelni képes objektumok csoportját.
Példa a felelősségi lánc mintájára
Értsük meg a felelősségi lánc mintájának példáját a fenti UML diagrammal.
UML a felelősségi lánc mintához:
A fenti UML megvalósítása:
1. lépés
Hozzon létre egy Logger absztrakt osztály.
shell script futtathatóvá tétele
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. lépés
Hozzon létre egy DebugBasedLogger osztály.
Fájl: 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. lépés
Hozzon létre egy ErrorBasedLogger osztály.
Fájl: 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. lépés
Hozzon létre egy ChainOfResponsibilityClient osztály.
Fájl: 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'); } }
töltse le ezt a példát
Kimenet
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){>