【发布时间】:2011-01-05 22:57:01
【问题描述】:
我必须设计DownloadManager,但我的主要问题与Download 可以发送到DownloadManager 的通知有关,例如onUpdate() 以更新进度条onError(), onFinish() 等。不知何故,DownloadManager 必须从其Downloads 接收此通知。
我想到了两种可能的方法:
- 观察者模式
- 回调
观察者模式
基本上有 1 个 Observable 和 N 个 Observers。在我的例子中,DownloadManager 是一个 Observer,而下载 Observables,所以关系是 N Observables 1 Observer,正好相反。
优点是将所有可能的通知集中在一种方法中,即来自 Observers 的 notify() 或 update()(来自 java)方法,在我的例子中只有 DownloadManager。我可以使用通知的代码将参数传递给 notify() 方法。
缺点?我将 oop 模式用于可以通过回调轻松完成的事情。另外,N observables 1 observer 这有点奇怪,至少对于观察者模式来说是这样,因为这种模式是为 1 observable N 观察者完成的,所以我真的不会使用观察者模式。
回调
非常类似于观察者模式。 DownloadManager 实现了一个“监听器”(接口)。这个监听器实现了onFinish()、onUpdate()等通知函数。然后这个监听器必须在所有下载中注册,所以当一个下载完成时它会调用listener.onFinish()。此外,我可以从下载中将参数传递给此方法,就像在观察者模式中一样。
优点:使用方便。 缺点:没有。
我可能会使用回调,因为在我看来,对 1 个观察者 N 个 observable 使用观察者模式是没有意义的。
而你,将使用哪个选项?
【问题讨论】:
-
"回调。优点:易于使用。缺点:无。"我想你已经找到了答案。
-
使用回调的一个缺点是它们增加了程序的耦合度(因为它们通常会为所有使用它们的函数添加一个新参数)。
-
我认为回调你在这里再次解释的观察者设计模式具有多个(类似于重载)更新(可观察的 o,对象 arg)方法,以方便不同的状态更改更新。
标签: oop design-patterns