- Padrão de Cadeia de Responsabilidade
- Vantagem da Cadeia de Responsabilidade DP
- Uso da Cadeia de Responsabilidade DP
- UML de Cadeia de Responsabilidade DP
- Exemplo de DP de Cadeia de Responsabilidade
Na cadeia de responsabilidade, o remetente envia uma solicitação para uma cadeia de objetos. A solicitação pode ser tratada por qualquer objeto da cadeia.
Um padrão de cadeia de responsabilidade diz que apenas 'evite acoplar o remetente de uma solicitação ao seu destinatário, dando a vários objetos a chance de lidar com a solicitação'. Por exemplo, um caixa eletrônico usa o padrão de design Cadeia de Responsabilidade no processo de doação de dinheiro.
Em outras palavras, podemos dizer que normalmente cada receptor contém referência de outro receptor. Se um objeto não puder lidar com a solicitação, ele passará a mesma para o próximo receptor e assim por diante.
Vantagem do padrão de cadeia de responsabilidade
- Reduz o acoplamento.
- Ele adiciona flexibilidade ao atribuir responsabilidades aos objetos.
- Permite que um conjunto de classes atue como uma só; eventos produzidos em uma classe podem ser enviados para outras classes de tratamento com a ajuda da composição.
Uso do padrão de cadeia de responsabilidade:
É usado:
registrar memória
- Quando mais de um objeto pode manipular uma solicitação e o manipulador é desconhecido.
- Quando o grupo de objetos que podem tratar a solicitação deve ser especificado de forma dinâmica.
Exemplo de padrão de cadeia de responsabilidade
Vamos entender o exemplo do Padrão de Cadeia de Responsabilidade pelo diagrama UML acima.
UML para padrão de cadeia de responsabilidade:
Implementação da UML acima:
Passo 1
Criar uma Registrador classe abstrata.
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){>
etapa 3
Criar uma DebugBasedLogger aula.
entrada do usuário javaArquivo: 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.
Passo 4
Criar uma Logger Baseado em Erros aula.
Arquivo: 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.
Etapa 5
Criar uma ChainOfResponsibilityCliente aula.
Arquivo: 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'); } }
baixe este exemplo
Saída
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){>