Java资深学姐 2024-06-09 09:17 采纳率: 95%
浏览 0
已结题

面试官:在项目中用过责任链模式吗?

面试官:在项目中用过责任链模式吗?
面试官:在项目中用过责任链模式吗?
面试官:在项目中用过责任链模式吗?

  • 写回答

2条回答 默认 最新

  • 专家-赤兔[在线] 优质创作者: 编程框架技术领域 2024-06-09 09:17
    关注

    引自免费微信小程序:皆我百晓生

    在项目中确实使用过责任链模式(Chain of Responsibility Pattern)。这是一种行为设计模式,它让对象沿着一条链传递请求,直到有一个对象处理这个请求。这样做的好处是,可以动态地改变处理顺序,或者添加新的处理程序,而无需修改现有代码。

    举个例子,想象一个简单的日志系统,我们可能有多种类型的日志处理器,比如普通日志、警告日志和错误日志。每种处理器都有不同的优先级,我们可以创建一个基础的日志处理器接口,然后为每种类型定义具体的实现类。

    首先,定义一个抽象的处理器接口:

    public interface LogHandler {
        void handle(String message);
    }
    

    接着,实现几个具体的处理器:

    public class NormalLogHandler implements LogHandler {
        private LogHandler next;
    
        @Override
        public void handle(String message) {
            if (message.contains("normal")) {
                System.out.println("[NORMAL] " + message);
            } else {
                if (next != null) {
                    next.handle(message);
                }
            }
        }
    
        public void setNext(LogHandler handler) {
            this.next = handler;
        }
    }
    
    public class WarningLogHandler implements LogHandler {
        private LogHandler next;
    
        @Override
        public void handle(String message) {
            if (message.contains("warning")) {
                System.out.println("[WARNING] " + message);
            } else {
                if (next != null) {
                    next.handle(message);
                }
            }
        }
    
        public void setNext(LogHandler handler) {
            this.next = handler;
        }
    }
    
    public class ErrorLogHandler implements LogHandler {
        @Override
        public void handle(String message) {
            if (message.contains("error")) {
                System.out.println("[ERROR] " + message);
            } else {
                // 如果没有下一个处理器,则不再处理
            }
        }
    }
    

    然后,我们将这些处理器连接成一个链:

    public class Main {
        public static void main(String[] args) {
            LogHandler errorHandler = new ErrorLogHandler();
            LogHandler warningHandler = new WarningLogHandler();
            warningHandler.setNext(errorHandler);
            LogHandler normalHandler = new NormalLogHandler();
            normalHandler.setNext(warningHandler);
    
            String messages[] = {"This is a normal log", 
                                "Warning: Something went wrong", 
                                "Error: Critical issue detected"};
    
            for (String message : messages) {
                normalHandler.handle(message);
            }
        }
    }
    

    这段代码会输出:

    [NORMAL] This is a normal log
    [WARNING] Warning: Something went wrong
    [ERROR] Error: Critical issue detected
    

    在这个例子中,NormalLogHandler先尝试处理消息,如果消息不包含"normal",则交给下一个处理器WarningLogHandler,以此类推。如果消息被处理了,后续的处理器就不再处理该消息。这就是责任链模式的基本应用。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 6月17日
  • 已采纳回答 6月9日
  • 创建了问题 6月9日