责任链模式

在责任链中, 发送方将请求发送到对象链。该请求可以由链中的任何对象处理。
责任链模式说, 只是“通过给多个对象一个处理请求的机会, 避免将请求的发送者耦合到其接收者”。例如, 一个ATM在资金发放过程中使用“责任链”设计模式。
换句话说, 我们可以说通常每个接收者都包含另一个接收者的参考。如果一个对象不能处理该请求, 则将其传递给下一个接收者, 依此类推。
责任链模式的优势

  • 它减少了耦合。
  • 在将责任分配给对象时, 它增加了灵活性。
  • 它允许一组类充当一个类。一个类中产生的事件可以在组合的帮助下发送到其他处理程序类。
责任链模式的用法: 它用于:
  • 当多个对象可以处理一个请求并且处理程序未知时。
  • 必须以动态方式指定可以处理请求的对象组时。
责任链模式的例子
【责任链模式】让我们通过上面的UML图了解责任链模式的示例。
UML的责任链模式:
责任链模式

文章图片
以上UML的实现: 步骤1 创建一个Logger抽象类。
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 msg); }

第2步 创建一个ConsoleBasedLogger类。
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); } }

第三步 创建一个DebugBasedLogger类。
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.

步骤4 创建一个ErrorBasedLogger类。
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.

第5步 创建一个ChainOfResponsibilityClient类。
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"); } }

输出量
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

    推荐阅读