本文主要是介绍设计模式来一发(十八)责任链模式,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
责任链(或职责链)模式使多个对象都有机会处理同一个请求,从而避免请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。
职责链上的处理者负责处理请求,客户只需要将请求发送到职责链上即可,无须关心请求的处理细节和请求的传递,所以职责链将请求的发送者和请求的处理者解耦了。
职责链模式和模板方法模式的区别在于,职责链上的节点是有共性的,也就是说处理职责链上的节点是有特定方法的;另外模板方法的重点在于定义了流程模板,这个是职责链所没有的。
实现一个日志处理服务,有Info级别和Error级别的日志。
// 日志服务虚拟类
public abstract class AbstractLogger {public static int INFO = 1;public static int ERROR = 2;protected int level;public void logMessage(int level, String message){if(this.level <= level) {write(message);}}abstract protected void write(String message);
}// Info日志
public class InfoLogger extends AbstractLogger {public ErrorLogger(int level){this.level = level;}@Overrideprotected void write(String message) { System.out.println("Info Console::Logger: " + message);}
}// Error日志
public class ErrorLogger extends AbstractLogger {public ErrorLogger(int level){this.level = level;}@Overrideprotected void write(String message) { System.out.println("Error Console::Logger: " + message);}
}
public class Test {private static AbstractLogger getChainOfLoggers(){AbstractLogger infoLogger = new InfoLogger(AbstractLogger.ERROR);AbstractLogger errorLogger = new ErrorLogger(AbstractLogger.ERROR);infoLogger.setNextLogger(errorLogger);return infoLogger; }public static void main(String[] args) {AbstractLogger loggerChain = getChainOfLoggers();loggerChain.logMessage(AbstractLogger.INFO, "This is an information.");loggerChain.logMessage(AbstractLogger.ERROR, "This is an error information.");}
}
这篇关于设计模式来一发(十八)责任链模式的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!