ThreadPoolExecutor 是否应用模板模式?
Does the ThreadPoolExecutor Apply the Template Pattern?
ThreadPoolExecutor 中有 2 个 hook 方法。
这个技巧让我想到了模板方法模式,其中有hook方法 在 abstract
class 中。但是,模板方法的抽象class中的钩子方法确实与模板方法不同ThreadPoolExecutor
中的:
ThreadPoolExecutor
class是具体的,而class定义了钩子方法 模板方法模式是abstract
- hook方法,如
beforeExecute(Thread t, Runnable r)
和afterExecute(Runnable r, Throwable t)
,在ThreadPoolExecutor
中是具体的 方法主体为空,而模板方法[=59]的abstract
class中的挂钩方法 =] 模式是 abstract
尽管 挂钩方法 都是 protected
表明它们在 sub 中应该是 overridden
classes
所以我的问题是:
ThreadPoolExecutor
是否完全属于模板方法模式?
- 是钩子方法本身。来自模板方法模式的独立技术?
就我个人而言,我会说 yes,因为 ThreadPoolExecutor 预定义了一组在 subclassing 时不能更改的命令,因为它被标记为 final
。参见 #runWorker
。
这是模板:第一个 beforeExecute
,第二个 task.run
,第三个 afterExecute
.
final void runWorker(Worker w) {
// ... snip
beforeExecute(wt, task);
try {
task.run();
}
...
} finally {
afterExecute(task, thrown);
}
// ... snip
}
它将部分实现留给子class、beforeExecute
、afterExecute
。
但是,是的,我知道可以进行讨论,因为在这种情况下 class 只有挂钩(未标记为抽象,因此允许但不是要求)来控制子 classes .
ThreadPoolExecutor 中有 2 个 hook 方法。
这个技巧让我想到了模板方法模式,其中有hook方法 在 abstract
class 中。但是,模板方法的抽象class中的钩子方法确实与模板方法不同ThreadPoolExecutor
中的:
ThreadPoolExecutor
class是具体的,而class定义了钩子方法 模板方法模式是abstract
- hook方法,如
beforeExecute(Thread t, Runnable r)
和afterExecute(Runnable r, Throwable t)
,在ThreadPoolExecutor
中是具体的 方法主体为空,而模板方法[=59]的abstract
class中的挂钩方法 =] 模式是abstract
尽管 挂钩方法 都是protected
表明它们在 sub 中应该是overridden
classes
所以我的问题是:
ThreadPoolExecutor
是否完全属于模板方法模式?- 是钩子方法本身。来自模板方法模式的独立技术?
就我个人而言,我会说 yes,因为 ThreadPoolExecutor 预定义了一组在 subclassing 时不能更改的命令,因为它被标记为 final
。参见 #runWorker
。
这是模板:第一个 beforeExecute
,第二个 task.run
,第三个 afterExecute
.
final void runWorker(Worker w) {
// ... snip
beforeExecute(wt, task);
try {
task.run();
}
...
} finally {
afterExecute(task, thrown);
}
// ... snip
}
它将部分实现留给子class、beforeExecute
、afterExecute
。
但是,是的,我知道可以进行讨论,因为在这种情况下 class 只有挂钩(未标记为抽象,因此允许但不是要求)来控制子 classes .