背景的
我可以访问我用于录音/分析的库的来源,需要为我的应用程序修改它。
有一个主要活动(A类),我在其中设置了视图和内容。该库有一个类(B类),使用Audio Recorder处理来自麦克风的原始音频数据。该类的一个实例作为任务通过另一个扩展AsyncTask的类(C类)运行,其中主活动有一个实例。
因此,类A具有类C的实例,类C具有类B的实例,类B具有我想从类A访问的原始数据。
为什么?
我想调用一个活动,显示一个包含B类原始数据的图表。
我尝试了什么
我添加了一个方法来获取B类中的原始数据并从C类中调用它。现在我可以在C类中创建一个类似的方法,这样A类就可以从C类中获取原始数据。然而,这使我成为了想要呕吐。
另一种方法可能是从C类本身调用图形活动,但我觉得我正在添加不属于该类的逻辑。
我想要一个很好的方法来实现它,但没有设计模式的背景,也没有很多常识。这里真的很感激帮助。
/ E
答案 0 :(得分:1)
我认为正确的OO方式正如你所描述的那样:
<强>解释强>
尽管它起初似乎很笨拙,但它是正确的面向对象的方式,因为这样你以后就可以使用该方法从任何其他类(比如D类)访问B类中的原始数据)无需再考虑其他逻辑。
此外,您可能需要从另一个活动(例如E)运行该异步任务(C)。在这种情况下,您可以省去重复使用getRecordedAudio,而无需重新发明轮子。
最后的笔记
根据您对API的解释,这是我能想到的最佳方式。如果还有其他限制,您需要告诉我们。
答案 1 :(得分:0)
好老Observer Pattern是什么。
你的B类是Observable,它需要一种注册观察者的方法。 A和C都是将向B注册的观察者,他们都有一种方法可以通知。
如果B实例的数据有任何变化,它将为所有已注册的对象A和C调用notify方法,并且它们可以单独作出反应。
我认为如果有可用的来源是完成任务的最佳方式。查看wiki链接,了解有关实现模式所需内容的更多信息,但总的来说,它非常简单。