2011-09-30 105 views
2

喜同胞的Android程序員,Android應用程序架構:如何將所有屏幕之間共享行爲

這就是我每一次鬥爭的問題時,我提出一個新的應用程序。想象一下你的應用程序中有Activity,ListActivity和MapActivity的子類。現在我希望當用戶單擊菜單按鈕時,每個屏幕都有相同的選項菜單。所以我用這種行爲做了一個BaseActivity。但是因爲Java不允許多繼承,所以我必須爲每種類型的Activity編寫三個BaseActivities。這是醜陋的,因爲我有三次相同的代碼...我能想到的唯一解決方案是使這些BaseActivities中的一些行爲是靜態的,並參考其他BaseActivites中的行爲。但是仍然有很多重複的東西......任何人都有針對該問題的更優雅的解決方案?

Cheers

+0

爲什麼不在正常的Activity中使用ListView和MapView?這樣你可以使用你的單一的BaseActivity。 – nhaarman

+2

@Niek:您必須在'MapActivity'中使用'MapView'。然而,你關於'ListView'的觀點當然是好的,因爲相對較少的應用程序需要嵌入地圖,所以使用「Activity」的一個子類可以最大限度地實現這一目標。 – CommonsWare

+0

啊,我不知道:) – nhaarman

回答

4

這是單繼承語言的一種取捨。而不是通過繼承各種活動子類來複制代碼,請使用委託。這也稱爲委派繼承。您將獲得多重繼承的功能,而無需負債。

這是通過創建一個具有所有共享功能的委託類,然後讓「超級」類調用委託來實現的。這仍然需要一小部分的複製和粘貼代碼,但它會很小。維基百科有一個很好的例子Delegation pattern。如果你有C#的背景,這種授權形式是相似的,但不限於單個方法和多個事件。

+0

基本上就像我提到的調用BaseActivity的靜態方法一樣。但我想這是你可以在這種情況下使用的最優雅的模式。謝謝。 – Korbi

+1

它有點類似,但是靜態方法存在一些委託不具有的缺陷。最重要的是繼承,因爲靜態方法不能被重寫。我也認爲這是更好的整體設計。 –

+0

有道理。將從現在開始使用委託模式。謝謝! – Korbi

相關問題