在Android中进行子类化活动时,是否有一种设计模式可以减少代码重复?

时间:2010-04-06 18:07:44

标签: java android design-patterns oop

我有一项与一些活动有关的常见任务 - 下载数据然后显示它。我已经下载了下载部分;当然,由于用户可能会在下载完成之前更改方向或取消活动,但是代码就在那里,这有点棘手。有足够的代码处理这些情况,这样我就不想将它复制/粘贴到我拥有的每个Activity中,所以我想创建一个抽象的子类Activity本身,这样它就可以处理一个后台下载然后启动一个方法用数据填充页面。

这一切都有效。问题是,由于单继承,我被迫为任何其他类型的Activity重新创建完全相同的类 - 例如,我使用Activity,ListActivity和MapActivity。要对所有三个使用相同的技术,需要三个重复的类,除了每个类扩展一个不同的Activity。

是否有可以减少代码重复的设计模式?就目前而言,我已经保存了很多重复,但是我很难看到三个类中完全相同的代码,只是为了让它们每个子类都有不同类型的Activity。

编辑:因为看起来我需要更具体一点......

假设我正在尝试在方向更改期间解决AsyncTask后台下载问题。我现在的解决方案是使用回调;有我的下载管理器启动这些下载,然后我让Activity附加一个回调。当方向改变时,活动被销毁然后重新创建;在此过程中,我将旧的Activity的回调分离,然后在新的Activity中附加一个新的回调。

方向更改是一个常见问题,在多个活动中,我在数据加载时使用进度视图启动Activity。我想要解决的是不必十次重新实现这种方向处理逻辑;我的初始解决方案是子类Activity,但后来我遇到了问题。

4 个答案:

答案 0 :(得分:3)

Prefer composition over inheritance。无论什么是常见的,委托给一些可以成为Activity,ListActivity和MapActivity的成员的类。

答案 1 :(得分:0)

问题在于您正在混合视图和程序的逻辑。 只要您的应用程序没有从系统中被杀死,就会运行像AsyncTask这样的后台线程。您可以在异步任务中下载所有内容,然后将其保存在SD卡上的某个位置,以便在准备就绪时从那里检索它。

您可以继承application class来保存对任务的引用,或者处理程序与每个Activity的类进行通信。

如果这根本不是你问题的解决方案,也许你可以稍微澄清一下这个问题。在onCreate ...方法中知道你在做什么会有所帮助。

答案 2 :(得分:0)

我没有使用MapActivity,但是我通过不使用ListActivity并在Activity中自己提供功能来解决了这个问题。如果您看一下,ListActivity中确实没有那么多:http://google.com/codesearch/p?hl=en#uX1GffpyOZk/core/java/android/app/ListActivity.java您自己实现功能,您可以获得更多自定义和更多成长空间。

答案 3 :(得分:0)

您是否有任何方法可以使用静态方法将助手类传递给您,并在那里完成共同的工作,而不是在每项活动中完成?