设计模式之工厂模式
来源:互联网 发布:淄博哪里找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
- 设计模式之工厂模式
- 设计模式之工厂模式
- 设计模式之工厂模式
- 设计模式之工厂模式
- 设计模式之工厂模式
- 设计模式之工厂模式
- 设计模式之---工厂模式
- 设计模式之工厂模式
- 设计模式之工厂模式
- 设计模式之工厂模式
- 设计模式之工厂模式
- 设计模式之-工厂模式
- 设计模式之工厂模式
- 设计模式之工厂模式
- 设计模式之工厂模式
- 设计模式之工厂模式
- 设计模式之 ------工厂模式
- 设计模式之工厂模式
- 第三章 快速搭建Spring4.x项目
- SQL datediff (时间差)
- Eclipse 安装最新SVN插件
- 梳理
- JAVA设计模式之享元模式Flyweight
- 设计模式之工厂模式
- c++ 之类的前置声明
- Struts2系列笔记(7)---Struts2类型转换
- 【Android应用开发】Instrumentation简单的模拟按键发送消息
- pdb调试命令----python
- 流量红利渐失,电商的“新故事”往哪讲?
- 深入理解进程与线程的区别(终结篇)
- wifi基础知识
- Spring MVC之@RequestMapping 详解