我可以使用观察者模式进行错误处理吗?

时间:2012-03-06 08:29:44

标签: java observer-pattern

我可以使用观察者模式进行错误处理吗?它有什么优点/缺点?有人为此目的使用这种方法吗?

更新

class MyErrorApi{
public static final int NETWORK_ERROR = 1;

public(MyErrorApi error){
...
}
}


interface ErrorListener{
void onErrorOcurred(MyErrorApi arror)
}


class MyBaseScreen implements ErrorListener{


void onErrorOcurred(MyErrorApi arror){
swirch(arror){
**showPopup();**
.....
}
}

3 个答案:

答案 0 :(得分:6)

您更有可能需要一个简单的回调,例如ErrorHandler

public interface ErrorHandler {

    /**
     * Handle the given error, possibly rethrowing it as a fatal exception
     */
    void handleError(Throwable t);

}

这是一种非常常见的方法 - 您注册一个回调方法,以便在异常发生某处时收到通知。但是,这不是严格意义上的 Observer - 目标对象的状态没有改变,只会通知目标中发生的错误(另一方面,这是一种事件)。

通常,您可以拥有多个 Observer 。很少有错误处理程序,但不难想象。

答案 1 :(得分:2)

观察者模式可用于错误报告。有东西检测到错误情况并发出ErrorEvent,其他东西会将错误报告给日志或管理系统。这很常见。

但是请考虑代码的主要流程:您可能需要采用不同的路径

fetch customer's details
if customer is a good credit risk
    lend them some money

如果由于错误导致无法获取客户的详细信息,您的代码会怎么做?在概念上你需要

fetch customer's details
if the fetch worked AND customer is a good credit risk
    lend them some money

没有错误就有一定程度的直接条件。我们可以通过异常处理或错误检查来实现它,但是我们正在这样做,我们必须真正处理逻辑中的错误。

现在可以设计一个更加事件驱动的系统,通过响应事件来完成所有事情。在这种情况下,使用Observer模式完成所有操作,而不仅仅是错误处理。

答案 2 :(得分:2)

如果您有以下设计之一(或两者兼而有之),观察者模式看起来很有希望:

  • 我们有一个来源,可检测错误并生成错误通知。然后想要允许其他(未知)组件接收这些通知。
  • 我们有一个中心组件,可以处理错误通知,并希望让它侦听产生错误通知的其他(未知)组件

在其他情况下,我们可能会发现更适合的设计。

相关问题