Мне нужно сделать конструкцию DownloadManager
, но мой главный вопрос связан с уведомлениями, что Download
может отправить DownloadManager
как onUpdate()
для обновления строки выполнения, onError()
, onFinish()
и т.д. Как-то DownloadManager
должен получать эти уведомления из Download
s.
Я подумал о двух возможных способах:
- Шаблон наблюдателя
- Callbacks
Шаблон наблюдателя
В основном существует 1 наблюдаемый и N наблюдателей. В моем случае DownloadManager имеет te Observer и Downloads Observables, поэтому отношение N Observables 1 Observer, как раз наоборот.
Преимущество состоит в том, чтобы централизовать все возможные уведомления в одном методе, метод notify()
или update()
(из java) из Наблюдателей, в моем случае - только DownloadManager. Я могу передать параметр методу notify() с кодом уведомления.
Неудобство? Я использую шаблон oop для того, что можно легко сделать с помощью обратного вызова. Кроме того, N наблюдает 1 наблюдателя, что-то странное, по крайней мере, с шаблоном наблюдателя, потому что этот шаблон был выполнен для 1 наблюдаемого N наблюдателей, поэтому я действительно не буду использовать шаблон наблюдателя.
Обратный вызов
Очень похож на шаблон наблюдателя. DownloadManager реализует "слушатель" (интерфейс). Этот слушатель реализует функции уведомления onFinish(), onUpdate() и т.д. Затем этот прослушиватель должен быть зарегистрирован во всех файлах Загрузки, поэтому, когда загрузка закончится, вы вызовете listener.onFinish()
. Кроме того, я могу передавать параметры этим методам из Загрузки, как в шаблоне наблюдателя.
Преимущество: Простота использования. Недостаток: Нет.
Я, вероятно, воспользуюсь обратным вызовом, потому что, на мой взгляд, нет смысла использовать шаблон наблюдателя для наблюдаемых наблюдателей N.
И вы, какой вариант будет использовать?