I have to do a design of a DownloadManager
, but my main question is related to the notifications that a Download
can send to the DownloadManager
like onUpdate()
to update a progress bar, onError()
, onFinish()
, etc. Somehow the DownloadManager
has to receive this notifications from its Download
s.
I've thought 2 possible ways:
- Observer pattern
- Callbacks
Observer pattern
Basically there are 1 Observable and N Observers. In my case the DownloadManager has te be an Observer and the Downloads the Observables, so the relation is N Observables 1 Observer, just the opposite.
The advantage is to centralize all the possible notifications in one method, the notify()
or update()
(from java) method from the Observers, in my case only the DownloadManager. I can pass a param to the notify() method with the code of the notification.
Disadvantage? I'm using an oop pattern for a thing that can be done easily with a callback. Also, N observables 1 observer it's something weird, at least with the observer pattern because this pattern was done for 1 observable N observers, so I really won't be using the observer pattern.
Callback
Very similar to the observer pattern. The DownloadManager implements a "listener" (interface). This listener implements the notification functions onFinish(), onUpdate(), etc. Then this listener must be registered in all Downloads, so when a Download finishes it will call listener.onFinish()
. Additionally I can pass parameters to this methods from the Downloads, like in the observer pattern.
Advantage: Easily usage. Disadvantage: None.
I will probably use a callback because in my opinion it makes no sense to use an observer pattern for 1 observer N observables.
And you, which option will use?