que tengo que hacer un diseño de una DownloadManager
, pero mi pregunta principal está relacionada con las notificaciones que un Download
pueden enviar a la DownloadManager
como onUpdate()
para actualizar una barra de progreso, onError()
, onFinish()
, etc. De alguna manera el DownloadManager
tiene que recibir este notificaciones de su Download
s.¿Patrón de observador o devolución de llamada?
he pensado 2 maneras posibles:
- patrón de observador
- devoluciones de llamada
patrón Observer
Básicamente hay 1 Observadores observable y N. En mi caso, el DownloadManager tiene que ser un Observer y las Descargas los Observables, por lo que la relación es N Observables 1 Observer, todo lo contrario.
La ventaja es centralizar todas las notificaciones posibles en un método, el notify()
o el update()
(de Java) método de los observadores, en mi caso solo el DownloadManager. Puedo pasar un parámetro al método notify() con el código de la notificación.
¿Desventaja? Estoy usando un patrón de oop para algo que se puede hacer fácilmente con una devolución de llamada. Además, N observa que un observador es algo raro, al menos con el patrón del observador porque este patrón se realizó para 1 observador observable de N, por lo que realmente no usaré el patrón del observador.
devolución de llamada
muy similar al patrón de observador. DownloadManager implementa un "oyente" (interfaz). Este oyente implementa las funciones de notificación en Finish(), onUpdate(), etc. Luego, este listener debe estar registrado en todas las descargas, de modo que cuando finalice una descarga, llame al listener.onFinish()
. Además, puedo pasar parámetros a este método desde Descargas, como en el patrón de observador.
Ventaja: Fácil de usar. Desventaja: ninguna.
Probablemente usaré una devolución de llamada porque, en mi opinión, no tiene sentido utilizar un patrón de observador para 1 observador N observables.
Y usted, ¿qué opción utilizará?
"Devolución de llamada. Ventaja: Fácil de usar. Desventaja: ninguna". Creo que has encontrado tu respuesta. –
Una desventaja de utilizar devoluciones de llamada es que aumentan el acoplamiento del programa (ya que normalmente agregan un nuevo parámetro a todas las funciones que los utilizan). – synack
Creo que Callback lo que ha explicado aquí una vez más un patrón de diseño Observer con múltiples (algo así como Sobrecargado) métodos de actualización (Observable o, Object arg) para la conveniencia de diferentes actualizaciones de cambio de estado. –