2011-09-30 109 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

相关问题