代码之家  ›  专栏  ›  技术社区  ›  Hugh Jeffner

在不同的活动类型之间共享公共功能

  •  3
  • Hugh Jeffner  · 技术社区  · 15 年前

    我想提供不同活动类型之间的通用功能,例如打开和关闭数据库连接。请考虑以下类别:

    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 ? 我需要复印一份 数据活动 并让它扩展所需的类。

    对于我要添加的每个活动类型,有多个具有重复实现代码的类似乎真的很混乱。

    编辑 由于Java的设计方式(没有多重继承),我在上面所做的工作看起来不太可能实现。有几种方法可以最小化代码的重复,但是继承在这种情况下不起作用。

    1 回复  |  直到 15 年前
        1
  •  0
  •   Community Mohan Dere    9 年前

    从所有这些类继承(我不建议)并扩展它们(创建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 如果需要的话。