【问题标题】:Android App Architecture: how to share behavior between all screensAndroid App Architecture:如何在所有屏幕之间共享行为
【发布时间】:2011-09-30 20:58:25
【问题描述】:

各位 Android 程序员,

这是我每次制作新应用时都会遇到的问题。想象一下,您的应用中有 Activity、ListActivity 和 MapActivity 的子类。现在我希望每个屏幕都在用户单击菜单按钮时显示相同的选项菜单。所以我用这种行为做了一个 BaseActivity 。但是因为 Java 不允许多重继承,所以我必须为每种类型的 Activity 编写三个 BaseActivities。这很难看,因为我有三倍相同的代码......我能想到的唯一解决方案是在其中一个 BaseActivities 中使某些行为静态,并在其他 BaseActivites 中引用该行为。但是仍然有很多重复......谁有更优雅的解决这个问题的方法?

干杯

【问题讨论】:

  • 为什么不在普通的Activity中使用ListView和MapView呢?这样你就可以使用你的单个 BaseActivity。
  • @Niek:您必须在MapActivity 中使用MapView。不过,您关于ListView 的观点肯定是好的,而且由于相对较少的应用程序需要嵌入地图,因此使用Activity 的一个子类可以帮助您实现大部分目标。

标签: java android architecture multiple-inheritance


【解决方案1】:

这是单继承语言的权衡之一。与其通过继承各种 Activity 子类来复制代码,不如使用委托。这也称为委托继承。您将获得多重继承的功能而无需承担任何责任。

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

【讨论】:

  • 这与我提到的调用 BaseActivity 的静态方法基本相同。但我想这是您在这种情况下可以使用的最优雅的模式。谢谢。
  • 有点类似,但是静态方法有一些委托没有的缺点。最重要的是继承,因为静态方法不能被覆盖。我还认为这是更好的整体设计。
  • 有道理。从现在开始将使用委托模式。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多