Java - Слушатели / Наблюдатели VS Защищенные Методы Подкласса - PullRequest
0 голосов
/ 09 июня 2018

Я заметил в ThreadPoolExecutor ниже пустые методы:

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

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

protected void terminated() { }

в документах говорится, что мы можем переопределить те методы в подклассах или анонимных внутренних классах, которые будут вызываться до процесса, это означает, что эти защищенные методы представляют слушателей / наблюдателей для уведомления оследующий процесс в пуле.

Мой вопрос:

Каковы минусы у обычных слушателей / наблюдателей , которые мотивируют Дуга Ли использовать этот способ?

1 Ответ

0 голосов
/ 09 июня 2018

Создание слушателя для этих трех событий было бы лучшим подходом, если бы вы хотели сделать доступ к этим событиям общедоступным, потому что это обеспечивает гораздо более высокую степень разъединения между классом и его слушателями.

Созданиезащищенный доступ подразумевает более высокую степень соответствия между классом и слушателем: разработчики класса в конечном итоге создали бы защищенный RunnerListener интерфейс для слушателя, добавив защищенную DefaultRunnerListener реализацию для ситуаций, когда вам нужно переопределить один илидва метода и добавление защищенного метода для вас, чтобы предоставить слушателю.Поскольку доступ к такому слушателю также будет защищен, вы не сможете использовать для него фабричный метод.

Принимая все это во внимание, авторы решили, что проще будет предоставить защищенные методы,вместо того, чтобы добавлять сложность выше для разъединения, в котором нет необходимости.

...