面试官:在项目中用过责任链模式吗?
面试官:在项目中用过责任链模式吗?
面试官:在项目中用过责任链模式吗?
2条回答 默认 最新
关注引自免费微信小程序:皆我百晓生
在项目中确实使用过责任链模式(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,以此类推。如果消息被处理了,后续的处理器就不再处理该消息。这就是责任链模式的基本应用。本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报 编辑记录