gpt4 book ai didi

oop - 观察者模式还是回调?

转载 作者:行者123 更新时间:2023-12-03 23:46:53 26 4
gpt4 key购买 nike

我必须做一个 DownloadManager 的设计,但我的主要问题与 Download 的通知有关。可以发到DownloadManager喜欢 onUpdate()更新进度条,onError() , onFinish()等等。不知何故DownloadManager必须从其Download 接收此通知s。

我想到了两种可能的方法:

  • 观察者模式
  • 回电

  • 观察者模式

    基本上有 1 个 Observable 和 N 个 Observers。在我的例子中,DownloadManager 是一个 Observer,而下载 Observables,所以关系是 N Observables 1 Observer,正好相反。

    优点是将所有可能的通知集中在一种方法中, notify()update() (来自 java)来自 Observers 的方法,在我的例子中只有 DownloadManager。我可以使用通知代码将参数传递给 notify() 方法。

    坏处?我将 oop 模式用于可以通过回调轻松完成的事情。此外,N observables 1 observer 这很奇怪,至少对于观察者模式来说是这样,因为这种模式是为 1 个可观察的 N 观察者完成的,所以我真的不会使用观察者模式。

    打回来

    非常类似于观察者模式。 DownloadManager 实现了一个“监听器”(接口(interface))。这个监听器实现了onFinish()、onUpdate()等通知函数。然后这个监听器必须在所有下载中注册,所以当一个下载完成时它会调用 listener.onFinish() .此外,我可以从下载中将参数传递给此方法,就像在观察者模式中一样。

    优点:使用方便。
    缺点:没有。

    我可能会使用回调,因为在我看来,对 1 个观察者 N 个 observable 使用观察者模式是没有意义的。

    而你,将使用哪个选项?

    最佳答案

    还有一种选择,与观察者/回调方法相反。你可以把 DownloadManager 的客户从被动到主动的表演者。他们将定期请求其状态,而不是等待经理的消息。

    这样,您的下载过程对最终用户来说会更加顺畅。你将能够更好地控制它。

    当然,您将不得不使用两个线程。否则你将不得不教 DownloadManager以小步骤工作,将控制权交还给客户,而不是运行一项牢不可破的工作。

    关于oop - 观察者模式还是回调?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4583269/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com