【问题标题】:Java - Listeners/Observers VS Subclass Protected MethodsJava - Listeners/Observers VS Subclass Protected Methods
【发布时间】:2018-11-19 11:24:39
【问题描述】:

我在 ThreadPoolExecutor 中观察到下面的空方法:

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

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

protected void terminated() { }

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

我的问题是:

普通的listeners/observers 有什么缺点促使 Doug Lea 使用这种方式?

【问题讨论】:

  • 我想道格是询问他们是否做出决定的人;其他任何人都可能只是在进行有根据的推测。
  • 我相信这些方法的文档非常清楚。你能解释一下你不明白的部分吗?你认为它与听众/观察者有什么关系?
  • @AmitBera 重新阅读问题

标签: java methods listener protected threadpoolexecutor


【解决方案1】:

如果您想公开访问这三个事件,则为这三个事件创建一个监听器将是一种更好的方法,因为它在类与其监听器之间提供了更高程度的解耦。

使访问受保护意味着类和侦听器之间更高程度的亲和性:类的设计者最终会为侦听器创建一个受保护的RunnerListener 接口,并为您添加一个受保护的DefaultRunnerListener 实现需要重写一两个方法,并添加一个受保护的方法供您提供侦听器。因为对此类侦听器的访问也会受到保护,因此您将无法对其使用工厂方法。

考虑到所有这些,作者决定提供受保护的方法会更容易,而不是增加上述不必要的解耦复杂性。

【讨论】:

    猜你喜欢
    • 2017-10-15
    • 2011-03-05
    • 2018-07-28
    • 1970-01-01
    • 1970-01-01
    • 2012-06-06
    • 1970-01-01
    • 2014-10-20
    相关资源
    最近更新 更多