Мне нужно сделать конструкцию 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.
И вы, какой вариант будет использовать?