我想在不同的活动类型之间提供通用功能,例如打开和关闭数据库连接。考虑以下课程:
public class DataActivity extends Activity {
private DbAdapter mDbAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//open database
mDbAdapter = new DbAdapter(this);
mDbAdapter.open();
}
@Override
protected void onDestroy() {
super.onDestroy();
//close database
mDbAdapter.close();
}
public DbAdapter getDbAdapter() {
return mDbAdapter;
}
}
然后我可以简单地扩展DataActivity
并在整个班级中访问我的数据。但是,如果我想为ListActivity
或ExpandableListActivity
执行此操作,该怎么办?我需要复制DataActivity
并让它扩展所需的类。
对于我希望将其添加到的每种活动类型,多个类具有重复的实现代码,这似乎非常混乱。
修改 由于Java的设计方式(没有多重继承),看起来我上面尝试做的事情实际上并不可行。有几种方法可以最大限度地减少代码重复,但继承在这种情况下不起作用。
答案 0 :(得分:0)
通过从所有这些类继承(我推荐)并扩展它们(创建BaseActivity,BaseMapActivity,BaseXXXActivity ......)或使用聚合,这更有意义:Inheritance vs. Aggregation。 Android基于Java,所以所有规则&适用于Java的OOP实践。
例如:您可以在类中创建一个实例变量,如下所示:`private DbAdapter dbAdapter = new DbAdapter(this);
在onCreate
中,在open()
onDestroy
来电中添加close()
来电。我认为在上面的示例中不需要getAdapter()
函数。所以至少保存一些代码行。
要获得更少的代码,请尝试添加包含DataService
方法的instance(Context ctx)
类 - 如果需要,您可以在其中创建DbHelper
。