Подтвердить что ты не робот

Образец отзыва или обратный вызов?

Мне нужно сделать конструкцию 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.

И вы, какой вариант будет использовать?

4b9b3361

Ответ 1

Существует также один вариант, противоположный подходу Observer/Callback. Вы можете приглашать клиентов DownloadManager от пассивных к активным игрокам шоу. Вместо того, чтобы ждать сообщения от менеджера, они будут регулярно запрашивать его статус.

Таким образом, процесс загрузки будет выглядеть более плавным для конечного пользователя. И вы сможете лучше контролировать его.

Конечно, вам придется использовать два потока. Или вам придется научить DownloadManager работать небольшими шагами, возвращая управление своему клиенту, вместо того, чтобы запускать одну нерушимую часть работы.

Ответ 2

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

Ответ 3

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

Рассмотрим случай, когда у вас есть несколько DownloadManagers (возможно, это неверный вариант использования для вашей конкретной ситуации). Вам нужно будет зарегистрировать их оба. Если у вас есть еще больше, вам придется зарегистрировать их все. Довольно длинный список, плюс вам нужно реализовать управление слушателями в Download s

Ответ 4

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

Легко реализовать. В точке реализации он будет более масштабируемым с точки зрения функциональности индикатора выполнения и сколько скачал каждый из них и Total% Download