建设自己的数据库代码框架 --摘自肖老师博客160304
2016-03-25 00:00
381 查看
摘要: 当对一门技术的入门知识都掌握的差不多了,常用的一些api已经很熟识之后,如果想提升你的代码质量,就必然需要引入一些设计模式的思想,或者是java中的面向对象思想,而面向对象中最重要的就是抽象类以及接口,这两个东西虽然学过java的人都认识,但是要真正用好并且深入理解的,如果没有经过一段时间的知识以及代码的积累很难体会
原文地址:http://blog.csdn.net/xll712/article/details/50592114
书接上回
下面是三个类中的全代码:
好,写到这里我们就该结束了吗?no,我们还可以继续,come on baby。
以上的PersonDatabaseManager、StudentDatabaseManager是否可以利用工厂模式来创建了?
答案当然是yes!
普通工厂模式:建立一个工厂类,对实现了同一接口的一些类进行实例的创建。
这样的话就得出了我们下面的类:
到此,本次数据库的封装就结束。
原文地址:http://blog.csdn.net/xll712/article/details/50592114
书接上回
下面是三个类中的全代码:
public interface IDatabase<M,K> { boolean insert(M m); boolean add(M m); List<M> loadAll(); /** * 自定义查询 * * @return */ QueryBuilder<M> getQueryBuilder(); /** * @param where * @param selectionArg * @return */ List<M> queryRaw(String where, String... selectionArg); boolean deleteAll(); AbstractDao<M, K> getAbstractDao(); }123456789101112131415161718192021
public abstract class DatabaseManager<M, K> implements IDatabase<M, K> { private static final String DEFAULT_DATABASE_NAME = "greendao.db"; /** * The Android Activity reference for access to DatabaseManager. */ private DaoMaster.DevOpenHelper mHelper; private DaoSession daoSession; private SQLiteDatabase database; private DaoMaster daoMaster; protected Context context; protected String dbName; public DatabaseManager(Context context) { this.context = context; dbName = DEFAULT_DATABASE_NAME; getmHelper(context, dbName); } public DatabaseManager(Context context, String dbName) { this.context = context; this.dbName = dbName; getmHelper(context, dbName); } public DaoMaster.DevOpenHelper getmHelper(Context context, String dbName) { if (null == mHelper) { mHelper = new DaoMaster.DevOpenHelper(context, dbName, null); } return mHelper; } protected void openWritableDb() { getWritableDatabase(); getDaoMaster(); getDaoSession(); } protected SQLiteDatabase getWritableDatabase() { database = getmHelper(context, dbName).getWritableDatabase(); return database; } protected DaoMaster getDaoMaster() { if (null == daoMaster) { daoMaster = new DaoMaster(getWritableDatabase()); } return daoMaster; } protected DaoSession getDaoSession() { if (null == daoSession) { daoSession = getDaoMaster().newSession(); } return daoSession; } public void closeDbConnections() { if (null == mHelper) { mHelper.close(); mHelper = null; } if (null == daoSession) { daoSession.clear(); daoSession = null; } } public void clearDaoSession() { if (null == daoSession) { daoSession.clear(); daoSession = null; } } @Override public boolean insert(M m) { if (null == m){ return false; } openWritableDb(); getAbstractDao().insert(m); return true; } @Override public boolean add(M m) { if (null == m){ return false; } openWritableDb(); getAbstractDao().insert(m); return true; } @Override public List<M> loadAll() { openWritableDb(); return getAbstractDao().loadAll(); } @Override public boolean deleteAll() { openWritableDb(); getAbstractDao().deleteAll(); return false; } @Override public QueryBuilder<M> getQueryBuilder() { openWritableDb(); return getAbstractDao().queryBuilder(); } @Override public List<M> queryRaw(String where, String... selectionArg) { openWritableDb(); return getAbstractDao().queryRaw(where,selectionArg); } }123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
public class PersonDatabaseManager extends DatabaseManager<Person,Long> { public PersonDatabaseManager(Context context) { super(context); } public PersonDatabaseManager(Context context, String dbName) { super(context, dbName); } @Override public AbstractDao<Person, Long> getAbstractDao() { return getDaoSession().getPersonDao(); } }1234567891011121314151617
public class StudentDatabaseManager extends DatabaseManager<Student,String> { public StudentDatabaseManager(Context context) { super(context); } public StudentDatabaseManager(Context context, String dbName) { super(context, dbName); } @Override public AbstractDao<Student, String> getAbstractDao() { return getDaoSession().getStudentDao(); } }1234567891011121314
好,写到这里我们就该结束了吗?no,我们还可以继续,come on baby。
以上的PersonDatabaseManager、StudentDatabaseManager是否可以利用工厂模式来创建了?
答案当然是yes!
普通工厂模式:建立一个工厂类,对实现了同一接口的一些类进行实例的创建。
这样的话就得出了我们下面的类:
public class DatabaseManagerFactory { public static DatabaseManager getDataManager(Context context, int type) { switch (type) { case 0: return new PersonDatabaseManager(context); case 1: return new StudentDatabaseManager(context); } return null; } }12345678910111213
到此,本次数据库的封装就结束。
相关文章推荐
- android中写一个内部类来选择文件夹中指定的图片类型实例说明
- 基于java内部类作用的深入分析
- 深入解析Java中的内部类
- 对Java的面对对象编程中对象和引用以及内部类的理解
- java中的内部类详细总结
- 全面解读Java编程中的内部类
- Java嵌套类和内部类详解
- Java内部类的继承(全)
- 关于Scala的路徑依赖类型(Path-dependent type)
- java语言匿名内部类之回调
- java中的内部类总结
- Java内部类的总结
- 关于JAVA内部类的相关知识
- Java 中的成员内部类(转载)
- java 内部类作用分析
- greenDAO系列2--如何开始
- greenDAO系列3--又是介绍
- greenDAO系列6--会话
- greenDAO系列7--关系
- 回看基础--Java内部类详解