Java 将复杂的异常处理委托给单独的类?

Java 将复杂的异常处理委托给单独的类?,java,oop,design-patterns,Java,Oop,Design Patterns,我一直试图遵循使用组合而不是继承的默认规则来在类之间共享功能,但遇到了这样一种情况,即现有基类的方法非常复杂的异常处理现在需要专门用于某些子类(多个) 因此,基类中的异常处理类似于: try { doSomething() } catch (HttpClientErrorException ex) { // complicated logic } catch (HttpServerErrorException ex) { // complicated logic } ca

我一直试图遵循使用组合而不是继承的默认规则来在类之间共享功能,但遇到了这样一种情况,即现有基类的方法非常复杂的异常处理现在需要专门用于某些子类(多个)

因此,基类中的异常处理类似于:

try {
    doSomething()
} catch (HttpClientErrorException ex) {
    // complicated logic
} catch (HttpServerErrorException ex) {
    // complicated logic
} catch (RestClientException ex) {
    // complicated logic
} catch (Exception ex) {
    throw ex;
}
public void handleException(Exception ex) {
    if (ex instanceof HttpClientErrorException ) {
        // complicated logic
    }
    ..etc..
}
但是现在对于这个基类的某些扩展,我们想首先检查某种类型的
HttpClientErrorException
,然后执行特殊的逻辑。不是将需要这个特殊逻辑的类托管到扩展原始基类的新基类,而是应该考虑创建一个单独的异常处理程序接口并将其注入到基类吗?

接口的实现将实现
handleException
,它可能看起来像:

try {
    doSomething()
} catch (HttpClientErrorException ex) {
    // complicated logic
} catch (HttpServerErrorException ex) {
    // complicated logic
} catch (RestClientException ex) {
    // complicated logic
} catch (Exception ex) {
    throw ex;
}
public void handleException(Exception ex) {
    if (ex instanceof HttpClientErrorException ) {
        // complicated logic
    }
    ..etc..
}

这被认为是不好的做法吗?有没有我没有看到的缺点?如果是这样,那么处理这种情况的首选方法是什么?

< P>,或者,可以考虑使用构造函数而不是继承。例如,decorator模式。这将允许更灵活地实现分层结构,方便地插入新层并执行它们之间的调用的前处理和后处理,包括异常处理。

< P>可选地,可以考虑使用构图而不是继承。例如,decorator模式。这将允许更灵活地实现分层结构,轻松插入新层,并执行它们之间调用的预处理和后处理,包括异常处理