2013-07-25 196 views
1

背景Android:什麼是'優雅'的方式來修改這個庫?

我有機會獲得我使用錄音/分析庫的來源,需要對其進行修改我的應用程序。

有一個主要活動(A類),我在其中設置視圖和東西。該庫有一個類(B類),使用錄音機處理來自麥克風的原始音頻數據。該類的一個實例通過擴展AsyncTask的另一個類(類C)作爲任務運行,其中主活動具有一個實例。

所以A類具有C類的一個實例,C類具有B類的一個實例,B類具有原始數據我想從A類

爲什麼來訪問?

我要調用,顯示在B類

我試過

我添加了一個方法來獲得在B類和呼叫的原始數據中的原始數據的圖形活動它來自C類。現在我可以在C類中創建一個類似的方法,以便A類可以從C類獲取原始數據。但是,這使我想要嘔吐。

另一種方法可以從C類本身調用圖形活動,但我覺得我添加了不屬於該類的邏輯。

我想要一個很好的方法來實現這一點,但沒有設計模式的背景和常識。這裏真的很感謝幫助。

/E

+0

+1問題結構。 – kosa

+0

不知道這些類的結構,如果它是包含所述數據的類,您聽起來應該直接調用類B的這些數據。 – Brian

回答

1

我認爲正確的面向對象的方法是,正如你所描述的那樣:

  • 添加一個方法getRawData B類
  • 添加一個方法getRecordedAudio C類

說明

雖然它可能起初看起來很尷尬,但它是正確的面向對象的方式,因爲這樣你以後就可以使用該方法從任何其他類(比如D類)訪問來自B類的原始數據,而無需需要再次思考額外的邏輯。

此外,您可能需要從另一個活動(如E)運行該異步任務(C)。在這種情況下,您可以節省重複使用getRecordedAudio,而無需重新發明輪子。

最後說明

從您對API這解釋了什麼是我能想出最好的辦法。如果還有其他限制,你需要告訴我們。

0

有什麼好的舊Observer Pattern

您的B類將是需要註冊觀察者的方法的Observable。 A和C都是將向B註冊的觀察員,他們都有一個通知方法。

如果B實例的數據有任何變化,它將調用所有註冊對象A和C的notify方法,並且它們可以單獨作出反應。

我認爲如果可用來源是最優雅的方式來完成您的任務。查看維基鏈接,瞭解您需要實現該模式的更多信息,但總的來說,這非常簡單。

相關問題