Android:修改这个库的“优雅”方法是什么?

时间:2013-07-25 14:34:55

标签: java android api

背景

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

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

因此,类A具有类C的实例,类C具有类B的实例,类B具有我想从类A访问的原始数据。

为什么?

我想调用一个活动,显示一个包含B类原始数据的图表。

我尝试了什么

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

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

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

/ E

2 个答案:

答案 0 :(得分:1)

我认为正确的OO方式正如你所描述的那样:

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

<强>解释

尽管它起初似乎很笨拙,但它是正确的面向对象的方式,因为这样你以后就可以使用该方法从任何其他类(比如D类)访问B类中的原始数据)无需再考虑其他逻辑。

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

最后的笔记

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

答案 1 :(得分:0)

好老Observer Pattern是什么。

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

如果B实例的数据有任何变化,它将为所有已注册的对象A和C调用notify方法,并且它们可以单独作出反应。

我认为如果有可用的来源是完成任务的最佳方式。查看wiki链接,了解有关实现模式所需内容的更多信息,但总的来说,它非常简单。