设计模式之工厂模式

来源:互联网 发布:淄博哪里找seo公司 编辑:程序博客网 时间:2024/06/03 02:48

这篇博士是工厂模式和数据库设计连接起来实现的,数据库是用比较流行的Dao模式设计的。

先上代码,根据代码来解释:

先是SQLiteOpenHelpler类的写法:

public class SQLdbhHelper extends SQLiteOpenHelper {    private static final String LIBRARY = "rapid.db";    private static SQLdbhHelper helper;    private SQLdbhHelper(Context context, SQLiteDatabase.CursorFactory factory, int version) {        super(context, LIBRARY, factory, version);    }    public static SQLiteDatabase getInstance(Context context) {        if (helper == null) {            // 将数据库设计成单利模式,只有一个连接,只有在多线程先操作不会出现错误,            //在程序运行的时候不调用SQLiteDatabase的close方法,保持长连接,不然会奔溃            helper = new SQLdbhHelper(context, null, 1);        }        return helper.getWritableDatabase();    }    @Override    public void onCreate(SQLiteDatabase db) {        db.execSQL(DaoTest.Sql.CREATE_TestTable);    }    @Override    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {    }}


然后是工厂模式Dao的和数据库的Dao的接口设计

工厂模式Dao的接口为:

public interface TableInterface {    /**     * 用于获取数据库的连接SQLiteDatabase     * @return     */    SQLiteDatabase getDatabase();}
然后是对到的第一步实现,犹豫数据库所有的Dao都要实现该方法,切该方法实现都一样,所以单独一个类实现,然后继承该类:

public class TableImp implements TableInterface {    private SQLiteDatabase database;    protected TableImp(Context context) {        database = SQLdbhHelper.getInstance(context);    }    /**     * 说Dao类的公共方法,方便实现外部调用获取SQLiteDatabase     * @return     */    @Override    public SQLiteDatabase getDatabase() {        return database;    }}

具体Dao类的实现也是工厂模式的各个岗位的实现,每个Dao就是一个表,这样方便管理,我这里设计的时候没有将sql语句放到一个公共的类中,而是将对应的sql语句放到相应表的炒作中

public class DaoTest extends TableImp {    public DaoTest(Context context) {        super(context);    }    /**     * 快速插入数据,这个方法是insert(String[] data)一条一条插入数据库的快好几倍     * 全部插入成功返回true,否则false     */    public boolean insert(List<TestBean> data) {        boolean saveSuccee = false;        LogUtils.toE("sql", "insert:" + DaoTest.Sql.insertALL);        //开启事务        getDatabase().beginTransaction();        try {            SQLiteStatement stmt = getDatabase().compileStatement(DaoTest.Sql.insertALL);            for (int i = 0; i < data.size(); i++) {                stmt.bindString(1, data.get(i).getName());                stmt.bindString(2, data.get(i).getSex());                stmt.bindString(3, data.get(i).getId_DB() + "");                stmt.execute();                stmt.clearBindings();            }            //事务完成            getDatabase().setTransactionSuccessful();            saveSuccee = true;        } catch (Exception e) {            saveSuccee = false;        } finally {            //提交事务            getDatabase().endTransaction();        }        LogUtils.toE("sql", "insert:" + DaoTest.Sql.insertALL);        return saveSuccee;    }    public void insert(String[] data) {        LogUtils.toE("sql", "insert:" + DaoTest.Sql.insertALL);        getDatabase().execSQL(DaoTest.Sql.insertALL, data);    }    public void insert(String sql) {        LogUtils.toE("sql", "insert:" + sql);        getDatabase().execSQL(sql);    }    /**     * 删除     */    public void delete() {    }    /**     * 修改     */    public void updata() {    }    /**     * 查询     */    public void seletct() {    }    /**     * 将所有Sql语句提到一个类中,方便管理     */    public static class Sql {        public static String NAME = "testTable";        /**         * 创建表         */        public static final String CREATE_TestTable =                "create table " +                        NAME +                        "(id integer primary key autoincrement not null," +                        " name text not null," +                        " sex text not null," +                        " id_DB integer not null)";        private static final String insertALL = "insert into " +                NAME +                " (name,sex,id_DB)" +                " values(?,?,?)";    }}

接下来是最重要的一般,就是关联工厂模式,Dao的工厂模式:

public class DaoFactory {    public static final int TestTable = 1;    public static TableInterface getTable(int type, Context context) {        TableInterface table = null;        switch (type) {            case TestTable:                table = new DaoTest(context);                break;        }        return table;    }}
具体用法:

DaoTest  testTable = (DaoTest) DaoFactory                .getTable(DaoFactory.TestTable, getApplicationContext());

然后调用DaoTest中的各个方法完成逻辑业务




0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 广东学考考了d怎么办 上嘴唇干燥紧绷怎么办 美国大学gpa非常低怎么办 大学手机作弊通报教务处怎么办 崩坏3邮箱验证码过期怎么办 快递员被顾客恶意投诉怎么办 5岁幼儿逻辑思维差怎么办 脸一边胖一边瘦怎么办 夏天穿鞋子脚痒怎么办 脚痒怎么办但不是脚气 脚气脚趾缝烂了怎么办 凉鞋穿久了臭怎么办 运动鞋穿久了臭怎么办 体恤穿久了发臭怎么办 十七八岁青少年逆反心理怎么办 挨刚煮好的粥烫伤改怎么办? 5e的demo有水印怎么办 宝宝湿疹激素一停药复发怎么办 木工家装没事做怎么办 取票之后票丢了怎么办 补牙咬合低了点怎么办 留学生上美国网课上不了网怎么办 大四绩点不够2.0怎么办 ucas申请成绩下来后怎么办 在本校读研毕业东西怎么办 美国硕士gpa低于3.0怎么办 英国t4签证拒签怎么办 abc洗液过敏了怎么办 护士电子化注册忘记用户名怎么办 手机重力感应坏了怎么办 电脑所有驱动都删除了怎么办 毕业生没有签工作档案怎么办 澳洲两年工作签怎么办 上班一年没签劳动合同怎么办 公司拖欠工资怎么办没签劳动合同 brp丢了怎么办回国补 被怀疑假结婚该怎么办 中考作弊被捉了怎么办 露娜注册错了怎么办 去泰国开民宿怎么办工作签证 绩点2.7想出国怎么办