首页 > 代码库 > 单例模式对比,运用,总结
单例模式对比,运用,总结
相关优秀文章:http://blog.csdn.net/beyond0525/article/details/22794221
http://www.360doc.com/content/11/0810/12/1542811_139352888.shtml
http://zz563143188.iteye.com/blog/1847029
http://www.blogjava.net/ITdavid/archive/2008/01/22/176939.html
http://www.cnblogs.com/yidianfeng/archive/2011/11/07/2239246.html
http://spiritfrog.iteye.com/blog/214986
代码更改比较:
//单例模式 public class Dao { private static Dao dao = null; private Context context; private Dao(Context contex) { this.context = contex; } public static Dao getInstance(Context context) { if (dao == null) { dao = new Dao(context.getApplicationContext()); } return dao; } // 连接数据库 public SQLiteDatabase getConnection() { SQLiteDatabase sqLiteDatabase = null; try { sqLiteDatabase = new DatabaseHelper(context, DatabaseHelper.DBNAME) .getReadableDatabase(); } catch (Exception e) { e.printStackTrace(); } return sqLiteDatabase; } public static void createTable(SQLiteDatabase sqLiteDatabase){ sqLiteDatabase.execSQL("CREATE TABLE IF NOT EXISTS priaseTable(id integer primary key autoincrement,clickId varchar(100)," + "clickType varchar(100),clickCount INTEGER,nativeClick INTEGER)"); } public static void createRecordTable(SQLiteDatabase sqLiteDatabase){ sqLiteDatabase.execSQL("CREATE TABLE IF NOT EXISTS playRecordTable(id integer primary key autoincrement,playid varchar(100)," + "playType varchar(100),path varchar(100),adpath varchar(100),apic varchar(100),shareurl varchar(100),title varchar(100),time varchar(100))"); } /** * 创建上传服务器表uploadTable * mid-类型 stream-ftp服务器上文件地址 uid-上传用户id * */ public static void creatUploadTable(SQLiteDatabase sqLiteDatabase){ sqLiteDatabase.execSQL("CREATE TABLE IF NOT EXISTS uploadTable(id integer primary key autoincrement" + ",uid varchar(100),mid varchar(100),title varchar(100),description varchar(255)" + ",stream varchar(100),time varchar(100))"); } @SuppressLint("SimpleDateFormat") public synchronized void insertUploadTable(FtploadInfo ftploadInfo) { SQLiteDatabase database = getConnection(); try { String sql = "insert into uploadTable(" + "uid ,mid ,title ,description ,stream,time) values(?,?,?,?,?,?)"; Date date = new Date(); SimpleDateFormat simpleDateFormat = new SimpleDateFormat(); String time = simpleDateFormat.format(date); Object[] info = {ftploadInfo.getUid(),ftploadInfo.getMid(),ftploadInfo.getName() ,ftploadInfo.getDesc(),ftploadInfo.getStream(),time}; database.execSQL(sql, info); } catch (Exception e) { e.printStackTrace(); } finally { if (null != database) { database.close(); } } }
更改后代码:
//单例模式 5种模式,推荐使用静态内部内使用方式 public class Dao { //上下文用来连接数据库 private static Context context; //数据库库管理器 private static DatabaseHelper mdatebaseHelper; //数据库 private static SQLiteDatabase mdatabase; /** * 内部类实现单例模式 * 延迟加载,减少内存开销 * 方法中Singleton 有一个静态内部类SingletonHolder,内部类在外部加载的时候并不会加载,在有在调用getInstance才回加载。 * 另外SingletonHolder类使用Private修饰以确保外部类不能访问。 * 优点:延迟加载,线程安全(java中class加载时互斥的),也减少了内存消耗 */ private static class DaoHolder{ private static Dao dao = new Dao(); } /** * 私有的构造函数 * 延迟初始化 */ private Dao() { //延迟初始化全局上下文,初始化连接数据库 省去每次调用方法去连接一次服务器 mdatebaseHelper = new DatabaseHelper(context, DatabaseHelper.DBNAME); mdatabase = mdatebaseHelper.getWritableDatabase(); } public static Dao getInstance(Context context) { Dao.context = context; return DaoHolder.dao; } // 连接,并打开数据库(以读写的方式打开数据库) public void getConnection() { SQLiteDatabase sqLiteDatabase = null; try { mdatebaseHelper = new DatabaseHelper(context, DatabaseHelper.DBNAME); } catch (Exception e) { e.printStackTrace(); } } // 连接,并打开数据库(以读写的方式打开数据库) public static void open(){ mdatabase = mdatebaseHelper.getReadableDatabase(); } public static void createTable(){ if(!mdatabase.isOpen()){ open(); } mdatabase.execSQL("CREATE TABLE IF NOT EXISTS priaseTable(id integer primary key autoincrement,clickId varchar(100)," + "clickType varchar(100),clickCount INTEGER,nativeClick INTEGER)"); mdatabase.close(); } public static void createRecordTable(){ if(!mdatabase.isOpen()){ open(); } mdatabase.execSQL("CREATE TABLE IF NOT EXISTS playRecordTable(id integer primary key autoincrement,playid varchar(100)," + "playType varchar(100),path varchar(100),adpath varchar(100),apic varchar(100),shareurl varchar(100),title varchar(100),time varchar(100))"); mdatabase.close(); } public synchronized int isHasInfors(String clickId, String clickType) { open(); int id = -1; Cursor cursor = null; try { cursor = mdatabase.query("priaseTable", null, "clickId=? AND clickType=?", new String[] { clickId, clickType }, null, null, null); if (cursor.moveToFirst()) { id = cursor.getInt(0); } } catch (Exception e) { e.printStackTrace(); } finally { if (null != mdatabase) { mdatabase.close(); } if (null != cursor) { cursor.close(); } } return id; }
单例模式对比,运用,总结
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。