Java Android应用程序架构:如何在所有屏幕之间共享行为

Java Android应用程序架构:如何在所有屏幕之间共享行为,java,android,architecture,multiple-inheritance,Java,Android,Architecture,Multiple Inheritance,大家好,Android程序员们 这是我每次开发新应用程序时都会遇到的问题。假设您的应用程序中有Activity、ListActivity和MapActivity的子类。现在,我希望当用户单击菜单按钮时,每个屏幕都显示相同的选项菜单。所以我用这种行为做了一个卑鄙的举动。但是因为Java不允许多重继承,我必须为每种类型的活动编写三个BaseActivity。这是丑陋的,因为我有三倍相同的代码。。。我能想到的唯一解决方案是在其中一个BaseActivities中使一些行为保持静态,并在其他BaseAc

大家好,Android程序员们

这是我每次开发新应用程序时都会遇到的问题。假设您的应用程序中有Activity、ListActivity和MapActivity的子类。现在,我希望当用户单击菜单按钮时,每个屏幕都显示相同的选项菜单。所以我用这种行为做了一个卑鄙的举动。但是因为Java不允许多重继承,我必须为每种类型的活动编写三个BaseActivity。这是丑陋的,因为我有三倍相同的代码。。。我能想到的唯一解决方案是在其中一个BaseActivities中使一些行为保持静态,并在其他BaseActivities中引用这些行为。但是仍然有很多重复的。。。有谁有更优雅的解决方案


干杯

这是单一继承语言的折衷方案之一。使用委托而不是通过继承各种活动子类来复制代码。这也称为委托继承。您将获得多重继承的特性,而无需承担任何责任


这是通过创建一个具有所有共享功能的委托类,然后让“超级”类调用委托来实现的。这仍然需要少量的复制和粘贴代码,但这将是最小的。维基百科就是一个很好的例子。如果您有C语言背景,这种委托形式类似,但不限于单个方法和多个事件。

为什么不在正常活动中使用ListView和MapView?这样,您就可以使用单个BaseActivity了。@Niek:您必须在
MapActivity
中使用
MapView
。不过,你关于
ListView
的观点肯定很好,而且因为相对较少的应用程序需要嵌入地图,所以使用
Activity
的一个子类就可以实现大部分功能。这与我提到的调用BaseActivity的静态方法基本相同。但我想这是你在这种情况下可以使用的最优雅的图案。谢谢。这有点类似,但是静态方法有一些委托所没有的缺点。最重要的是继承,因为静态方法不能被重写。我还认为这是更好的整体设计。有道理。从现在起将使用委托模式。谢谢