Применяет ли ThreadPoolExecutor шаблон шаблона?

В ThreadPoolExecutor.

Этот метод напоминает мне о шаблоне метод шаблона, где в классе abstract есть методы-ловушки. Однако методы-ловушки в абстрактном классе метода шаблона отличаются от класса ThreadPoolExecutor следующим:

  • ThreadPoolExecutor является конкретным, тогда как класс, определяющий методы ловушек в шаблоне метод шаблона, является abstract
  • методы-ловушки, такие как beforeExecute(Thread t, Runnable r) и afterExecute(Runnable r, Throwable t), в ThreadPoolExecutor являются конкретными с пустым телом метода, тогда как методы-ловушки в abstract класс шаблона метод шаблона равен abstract, хотя тот факт, что оба метода ловушки имеют значение protected, указывает на то, что они должны быть overridden в своих подклассах.

Итак, мои ВОПРОСЫ таковы:

  • принадлежит ли ThreadPoolExecutor шаблону template method?
  • Является ли методом-ловушкой как таковым. независимый метод от шаблона template method?

person Rui    schedule 04.06.2018    source источник


Ответы (1)


Лично я бы сказал да, потому что ThreadPoolExecutor заранее определяет набор команд, который нельзя изменить при создании подкласса, поскольку он помечен как final. См. #runWorker. Это шаблон: первый beforeExecute, второй task.run, третий afterExecute.

final void runWorker(Worker w) {
  // ... snip
     beforeExecute(wt, task);
     try {
           task.run();
     } 
     ...
     } finally {
        afterExecute(task, thrown);
     }

   // ... snip
} 

Он оставляет некоторые части реализации подклассу beforeExecute, afterExecute.

Но да, я знаю, что может быть обсуждение, поскольку в этом случае класс имеет только крючки (не помеченные как абстрактные, поэтому разрешенные, но не обязательные) для управления подклассами.

person Nico Van Belle    schedule 04.06.2018
comment
Большое спасибо за ваше мнение :) так что кажется, что hook-методы в объектно-ориентированном языке программирования не могут существовать независимо от метода шаблона, не неужели так? - person Rui; 04.06.2018
comment
Если подумать логически, было бы мало смысла создавать класс с хуками без конечного метода шаблона, да. - person Nico Van Belle; 04.06.2018
comment
спасибо :) еще раз внимательно прочитав gof23, я обнаружил, что там упоминаются операции с ловушками, которые являются методом по умолчанию и могут быть переопределены. Итак, исходя из этого, я согласен с вашим ответом - person Rui; 04.06.2018