Java - 监听器/观察者VS子类受保护的方法

时间:2018-06-09 17:38:28

标签: java methods listener protected threadpoolexecutor

我在ThreadPoolExecutor中观察到空方法:

protected void beforeExecute(Thread t, Runnable r) { }

protected void afterExecute(Runnable r, Throwable t) { }

protected void terminated() { }

在docs中,它表示我们可以在子类或匿名内部类中覆盖那些将在进程之前调用的方法,这意味着那些受保护的方法代表侦听器/观察者来通知池中的下一个进程。

我的问题是:

正常的listeners/observers有什么缺点促使Doug Lea以这种方式使用?

1 个答案:

答案 0 :(得分:1)

如果您希望公开访问这些事件,那么为这三个事件制作一个监听器将是一种更好的方法,因为它在类及其侦听器之间提供了更高程度的解耦。

使访问受保护意味着类和侦听器之间的关联程度更高:类的设计者最终会为侦听器创建受保护的RunnerListener接口,添加受保护的DefaultRunnerListener实现对于需要覆盖一个或两个方法的情况,并为您提供受保护的方法来提供侦听器。因为对这样的监听器的访问也会受到保护,所以你将无法使用工厂方法。

考虑到所有这些因素,作者认为提供受保护的方法会更容易,而不是将上述复杂性添加到不必要的去耦中。