面试题答案
一键面试设计思路
采用责任链模式来组织和处理自定义异常。责任链模式允许你将请求沿着处理者链进行发送。每个处理者都有机会处理请求,或者将请求传递给链中的下一个处理者。在处理自定义异常的场景下,每个处理者可以负责处理特定类型的异常,这样可以使异常处理逻辑更加清晰和可维护。
关键代码片段
- 定义异常类
// 自定义异常基类
class BusinessException extends Exception {
public BusinessException(String message) {
super(message);
}
}
// 具体的自定义异常类
class UserNotFoundException extends BusinessException {
public UserNotFoundException(String message) {
super(message);
}
}
class PermissionDeniedException extends BusinessException {
public PermissionDeniedException(String message) {
super(message);
}
}
- 定义异常处理接口
interface ExceptionHandler {
void handle(BusinessException exception);
void setNext(ExceptionHandler next);
}
- 实现具体的异常处理类
class UserNotFoundExceptionHandler implements ExceptionHandler {
private ExceptionHandler next;
@Override
public void handle(BusinessException exception) {
if (exception instanceof UserNotFoundException) {
System.out.println("处理 UserNotFoundException: " + exception.getMessage());
} else if (next != null) {
next.handle(exception);
}
}
@Override
public void setNext(ExceptionHandler next) {
this.next = next;
}
}
class PermissionDeniedExceptionHandler implements ExceptionHandler {
private ExceptionHandler next;
@Override
public void handle(BusinessException exception) {
if (exception instanceof PermissionDeniedException) {
System.out.println("处理 PermissionDeniedException: " + exception.getMessage());
} else if (next != null) {
next.handle(exception);
}
}
@Override
public void setNext(ExceptionHandler next) {
this.next = next;
}
}
- 构建责任链并处理异常
public class Main {
public static void main(String[] args) {
ExceptionHandler userHandler = new UserNotFoundExceptionHandler();
ExceptionHandler permissionHandler = new PermissionDeniedExceptionHandler();
userHandler.setNext(permissionHandler);
try {
throw new PermissionDeniedException("没有权限访问该资源");
} catch (BusinessException e) {
userHandler.handle(e);
}
}
}
通过上述代码,我们利用责任链模式,将不同类型的自定义异常分发给对应的处理者进行处理,提高了代码的可维护性和扩展性。如果有新的自定义异常类型,只需新增对应的异常处理类并加入责任链即可。