责任链模式

来源:互联网 发布:万网域名注册 编辑:程序博客网 时间:2024/06/10 18:33

责任链模式(行为模式)

Chain of Responsibility模式,该模式构造一系列分别担当不同的职责的类的对象来共同完成一个任务,这些类的对象之间像条链子紧密相连

这里写图片描述

应用:Struts2拦截器

例子:打印日志,日志的种类根据严重级别有Info日志、Debug日志和Error日志等。这其中就包含责任链模式,先由Error日志类先处理,然后交由Debug,最后再由Info日志类处理。

AbstractLogger.java
抽象日志类

public abstract class AbstractLogger {    public static int INFO = 1;    public static int DEBUG = 2;    public static int ERROR = 3;    private int level;    private AbstractLogger nextLogger;    public AbstractLogger(int level) {        this.level = level;    }    public void setNextLogger(AbstractLogger nextLogger) {        this.nextLogger = nextLogger;    }    public void logMessage(int level, String message) {        if (this.level <= level)            printLogger(message);        if (nextLogger != null)            nextLogger.logMessage(level, message);    }    public abstract void printLogger(String message);}

InfoLogger.java
info日志类

public class InfoLogger extends AbstractLogger {    public InfoLogger(int level) {        super(level);    }    @Override    public void printLogger(String message) {        System.out.println("Info:" + message);    }}

Debug.java
调试日志类

public class DebugLogger extends AbstractLogger {    public DebugLogger(int level) {        super(level);    }    @Override    public void printLogger(String message) {        System.out.println("Debug:" + message);    }}

Error.java
错误日志类

public class ErrorLogger extends AbstractLogger {    public ErrorLogger(int level) {        super(level);    }    @Override    public void printLogger(String message) {        System.out.println("Error:" + message);    }}

Test.java
测试类

public class Test {     //创建责任链     private static AbstractLogger getChainOfLoggers(){          AbstractLogger errorLogger = new ErrorLogger(AbstractLogger.ERROR);          AbstractLogger debugLogger = new DebugLogger(AbstractLogger.DEBUG);          AbstractLogger infoLogger = new InfoLogger(AbstractLogger.INFO);          errorLogger.setNextLogger(debugLogger);          debugLogger.setNextLogger(infoLogger);          return errorLogger;        }    public static void main(String[] args) {        AbstractLogger loggerChain = getChainOfLoggers();        loggerChain.logMessage(AbstractLogger.INFO, "这是一个信息");        loggerChain.logMessage(2, "这是一个bug");        loggerChain.logMessage(3, "这是一个错误");    }}

结果

Info:这是一个信息Debug:这是一个bugInfo:这是一个bugError:这是一个错误Debug:这是一个错误Info:这是一个错误
原创粉丝点击