A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

模式定义

责任链模式为某个请求创建一个对象链。每个对象依序检查此请求,并对其处理,或者将它传给链中的下一个对象。



一个生动的例子

Handler抽象类:
public abstract class AbstractLoggerHandler {
        public static final int INFO = 1;
        public static final int DEBUG = 2;
        public static final int ERROR = 3;

        protected int level;
        protected AbstractLoggerHandler nextLoggerHandler;

        public void setNextLoggerHandler(AbstractLoggerHandler nextLoggerHandler) {
                this.nextLoggerHandler = nextLoggerHandler;
        }

        public void handleRequest(int level, String message) {
                if (this.level <= level) {
                        write(message);
                        if (this.level < level) {
                                if (nextLoggerHandler != null) {
                                        nextLoggerHandler.handleRequest(level, message);
                                }
                        }
                } else {
                        elseWrite();
                }
        }

        abstract protected void write(String message);

        abstract protected void elseWrite();

}

Handler具体类A:
class ConsoleLoggerHandler extends AbstractLoggerHandler {
        public ConsoleLoggerHandler(int level) {
                this.level = level;
        }

        @Override
        protected void write(String message) {
                System.out.println("Standard Console::Logger: " + message);
        }

        @Override
        protected void elseWrite() {
                System.out.println("Standard Console::Logger: 捕捉不到");
        }
}

Handler具体类B:
class FileLoggerHandler extends AbstractLoggerHandler {

        public FileLoggerHandler(int level) {
                this.level = level;
        }

        @Override
        protected void write(String message) {
                System.out.println("File::Logger: " + message);
        }

        @Override
        protected void elseWrite() {
                System.out.println("File Console::Logger: 捕捉不到");
        }
}

Handler具体类C:
class ErrorLoggerHandler extends AbstractLoggerHandler {
        public ErrorLoggerHandler(int level) {
                this.level = level;
        }

        @Override
        protected void write(String message) {
                System.out.println("Error Console::Logger: " + message);
        }

        @Override
        protected void elseWrite() {
                System.out.println("Error Console::Logger: 捕捉不到");
        }

}

测试类:
public class LoggerHandlerTest {
        public static void main(String[] args) {
                AbstractLoggerHandler consoleLoggerHandler = new ConsoleLoggerHandler(AbstractLoggerHandler.INFO);
                AbstractLoggerHandler fileLoggerHandler = new FileLoggerHandler(AbstractLoggerHandler.DEBUG);
                AbstractLoggerHandler errorLoggerHandler = new ErrorLoggerHandler(AbstractLoggerHandler.ERROR);
               
                consoleLoggerHandler.setNextLoggerHandler(fileLoggerHandler);
                fileLoggerHandler.setNextLoggerHandler(errorLoggerHandler);

                AbstractLoggerHandler loggerChainHandler = consoleLoggerHandler;
                System.out.println("=== INFO ===");
                loggerChainHandler.handleRequest(AbstractLoggerHandler.INFO, "This is an information.");
                System.out.println();
                System.out.println("=== DEBUG ===");
                loggerChainHandler.handleRequest(AbstractLoggerHandler.DEBUG, "This is an debug level information.");
                System.out.println();
                System.out.println("=== ERROR ===");
                loggerChainHandler.handleRequest(AbstractLoggerHandler.ERROR, "This is an error information.");
        }
}
---------------------
转载,仅作分享,侵删
作者:EagleLi1
原文:https://blog.csdn.net/qq_21687635/article/details/85063661


1 个回复

倒序浏览
奈斯
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马