私はどういうわけかDownloadManager
がこれを受信しなければならないなど、DownloadManager
の設計をしなければならないが、私のメインの質問はDownload
は、プログレスバーを更新するためにonUpdate()
ようDownloadManager
に送信できる通知に関連して、onError()
、onFinish()
通知はDownload
です。オブザーバーパターンまたはコールバック?
- Observerパターン
- コールバック
Observerパターン
基本的には1人の観察可能とNオブザーバーがあります
私は2つの可能な方法を考えました。私の場合、DownloadManagerにはObserverがあり、Observablesはダウンロードされているので、N Observables 1 Observerの関係になります。
利点は、Observersのnotify()
またはupdate()
(javaから)メソッドの場合、すべての可能な通知を、私の場合はDownloadManagerのみに集中させることです。通知のコードを使用して、notify()メソッドにパラメータを渡すことができます。
短所?私はコールバックで簡単に行うことができるもののためのoopパターンを使用しています。また、N個のオブザーバブルオブザーバー1人は観測者パターンで少なくとも何か変わっています。なぜなら、このパターンは観測可能なN個のオブザーバー1人のために行われたからです。したがって、私は実際にオブザーバーパターンを使用しません。オブザーバーパターンに非常に類似し
コールバック
。 DownloadManagerは "リスナー"(インターフェイス)を実装しています。このリスナーは、onFinish()、onUpdate()などの通知関数を実装します。このリスナーはすべてのダウンロードに登録する必要があります。ダウンロードが完了すると、listener.onFinish()
が呼び出されます。さらに、オブザーバのパターンのように、ダウンロードからこのメソッドにパラメータを渡すことができます。
利点:簡単に使用します。 短所:なし。
私はおそらくコールバックを使用します。なぜなら、私の意見では、1人のオブザーバーのNオブザーバブルに対してオブザーバーパターンを使用することは意味がないからです。
あなたはどのオプションを使用しますか?
"コールバックアドバンテージ:簡単に使用。短所:なし"私はあなたの答えを見つけたと思います。 –
コールバックを使用することの1つの欠点は、プログラムの結合を増加させることです(一般に、新しいパラメータを使用するすべての関数に新しいパラメータが追加されるため)。 – synack
私はあなたがここで説明したコールバックは、さまざまなステータス変更の更新の便宜のために、複数の(オーバーロードされたような)アップデート(Observable o、Object arg)メソッドを持つObserverデザインパターンを再度説明したと思います。 –