1

背景

我可以访问用于录音/分析的库的源代码,并且需要为我的应用程序修改它。

有一个主要活动(A 类),我在其中设置视图和内容。该库有一个类(B 类),它使用 Audio Recorder 处理来自麦克风的原始音频数据。该类的一个实例通过另一个扩展 AsyncTask 的类(C 类)作为任务运行,该类的主要活动有一个实例。

所以 A 类有 C 类的实例,C 类有 B 类的实例,B 类有我想从 A 类访问的原始数据。

为什么?

我想调用一个显示带有 B 类中的原始数据的图表的活动。

我试过的

我添加了一个方法来获取 B 类中的原始数据并从 C 类中调用它。现在我可以在 C 类中创建一个类似的方法,以便 A 类可以从 C 类中获取原始数据。然而,这让我想吐.

另一种方法可能是从 C 类本身调用图形活动,但我觉得我正在添加不属于该类的逻辑。

我想要一种很好的方法来实现这一点,但没有设计模式的背景,也没有太多的常识。在这里真的很感激帮助。

/E

4

2 回答 2

1

正如您所描述的,我认为正确的OO方式是:

  • 将方法 getRawData 添加到 B 类
  • 将方法 getRecordedAudio 添加到类 C

解释

尽管它起初可能看起来很奇怪,但它是正确的面向对象的方式,因为这样你以后就可以使用该方法从任何其他类(比如 D 类)访问 B 类的原始数据,而无需需要再次想出额外的逻辑。

此外,您可能需要从另一个活动(例如 E)运行该异步任务 (C)。在这种情况下,您可以节省地重用 getRecordedAudio 而无需重新发明轮子。

最后的笔记

根据您对 API 的解释,这是我能想到的最好方法。如果有任何其他限制,您需要告诉我们。

于 2013-07-25T14:49:52.900 回答
0

什么是好的旧观察者模式

您的 B 类将是需要注册观察者的方法的 Observable。A 和 C 都是将向 B 注册的观察者,他们都有一个通知方法。

如果 B 的一个实例的数据有任何变化,它会为所有注册的对象 A 和 C 调用 notify 方法,它们可以分别对它做出反应。

我认为如果有可用的资源,那是完成任务的最优雅的方式。查看 wiki 链接以获取有关实现该模式所需的更多信息,但总的来说它非常简单。

于 2013-07-25T15:03:07.560 回答