- Patró de cadena de responsabilitat
- Avantatge de la Cadena de Responsabilitat DP
- Ús de la Cadena de Responsabilitat DP
- UML de Cadena de Responsabilitat DP
- Exemple de Cadena de Responsabilitat DP
En cadena de responsabilitat, el remitent envia una sol·licitud a una cadena d'objectes. La sol·licitud la pot gestionar qualsevol objecte de la cadena.
Un patró de cadena de responsabilitat diu això 'evitar acoblar l'emissor d'una sol·licitud al seu receptor donant l'oportunitat a diversos objectes de gestionar la sol·licitud'. Per exemple, un caixer automàtic utilitza el patró de disseny de la cadena de responsabilitat en el procés de lliurament de diners.
En altres paraules, podem dir que normalment cada receptor conté la referència d'un altre receptor. Si un objecte no pot gestionar la sol·licitud, la passa al següent receptor i així successivament.
Avantatge del patró de cadena de responsabilitat
- Redueix l'acoblament.
- Afegeix flexibilitat mentre s'assignen les responsabilitats als objectes.
- Permet que un conjunt de classes actuïn com una; Els esdeveniments produïts en una classe es poden enviar a altres classes de gestor amb l'ajuda de la composició.
Ús del patró de cadena de responsabilitat:
S'utilitza:
barra d'eines d'accés ràpid de ms word
- Quan més d'un objecte pot gestionar una sol·licitud i el controlador és desconegut.
- Quan el grup d'objectes que poden gestionar la petició s'ha d'especificar de manera dinàmica.
Exemple de patró de cadena de responsabilitat
Entenem l'exemple del patró de cadena de responsabilitat amb el diagrama UML anterior.
UML per al patró de cadena de responsabilitat:
Implementació de l'UML anterior:
Pas 1
Crea un Registrador classe abstracta.
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){>
Pas 3
Crea un DebugBasedLogger classe.
Fitxer: 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.
Pas 4
Crea un ErrorBasedLogger classe.
matriu de bytes a cadenaFitxer: ErrorBasedLogger.java
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.
Pas 5
Crea un ChainOfResponsibilityClient classe.
Fitxer: 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'); } }
descarregueu aquest exemple
Sortida
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){>