Ich habe einen Entwurf eines DownloadManager
zu tun, aber meine Hauptfrage ist mit den Datenübermittlungen, die ein Download
zum DownloadManager
wie onUpdate()
senden kann ein Fortschrittsbalken zu aktualisieren, onError()
, onFinish()
etc. Irgendwie ist der DownloadManager
diese erhalten hat Benachrichtigungen von seiner Download
s.Beobachtermuster oder Callback?
Ich habe 2 Möglichkeiten gedacht:
- Observer Muster
- Rückrufe
Observer Muster
Grundsätzlich gibt es 1 beobachtbar und N Beobachter. In meinem Fall muss der DownloadManager ein Observer sein und der Download der Observables, also ist die Beziehung N Observables 1 Observer, genau das Gegenteil.
Der Vorteil ist, alle möglichen Benachrichtigungen in einer Methode zu zentralisieren, die notify()
oder update()
(von Java) -Methode von den Beobachtern, in meinem Fall nur der DownloadManager. Ich kann einen Parameter an die notify() -Methode mit dem Code der Benachrichtigung übergeben.
Nachteil? Ich benutze ein Oop-Muster für eine Sache, die einfach mit einem Callback erledigt werden kann. Außerdem beobachtet N einen Beobachter, es ist etwas seltsam, zumindest mit dem Beobachtermuster, weil dieses Muster für 1 beobachtbare N Beobachter gemacht wurde, so dass ich das Beobachtermuster wirklich nicht verwenden werde.
Rückruf
Sehr ähnlich dem Beobachter-Muster. Der DownloadManager implementiert einen "Listener" (Schnittstelle). Dieser Listener implementiert die Benachrichtigungsfunktionen onFinish(), onUpdate() usw. Dann muss dieser Listener in allen Downloads registriert sein. Wenn ein Download beendet ist, wird er listener.onFinish()
aufrufen. Zusätzlich kann ich aus den Downloads Parameter an diese Methoden übergeben, wie im Beobachtermuster.
Vorteil: Einfache Verwendung. Nachteil: Keine.
Ich werde wahrscheinlich einen Callback verwenden, weil es meiner Meinung nach keinen Sinn macht, ein Beobachtermuster für 1 Beobachter N Observablen zu verwenden.
Und Sie, welche Option wird verwendet?
"Rückruf. Vorteil: Einfache Verwendung. Nachteil: Keine." Ich denke du hast deine Antwort gefunden. –
Ein Nachteil der Verwendung von Callbacks besteht darin, dass sie die Kopplung des Programms erhöhen (da sie in der Regel allen Funktionen, die sie verwenden, einen neuen Parameter hinzufügen). – synack
Ich denke, Callback, was Sie hier erklärt haben, wieder ein Observer Design Pattern mit mehreren (so etwas wie überladen) update (Observable o, Object arg) -Methoden für die Bequemlichkeit der verschiedenen Statuswechsel-Updates. –