您的位置:首页 > 移动开发 > Android开发

Android 设计模式-----单利模式

2015-09-09 10:36 369 查看
在Android中一般实际APP 开发中用到的 账号信息对象管理, 数据库对象(SQLiteOpenHelper)等都会用到单例模式,确实很方便。

单利模式的定义:确保一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。

描述:单例模式注意事项:只能使用单例类提供的方法得到单例对象,不要使用反射,否则将会实例化一个新对象。不要做断开单例类对象与类中静态引用的危险操作。多线程使用单例使用共享资源时,注意线程安全问题。

使用方法介绍:

首先,要使用单利模式创建的时候需要实现Serializable接口。以AreaManage类为例;下同。

public class AreaManage implements Serializable { }

其次,定义类和上下文对象,实现getInstance()

public static AreaManage getInstance() {
		if (sAreaManage == null) {
			sAreaManage = new AreaManage();
		}
		return sAreaManage;

	}

	public static AreaManage getInstance(Context context) {
		if (sAreaManage == null) {
			sAreaManage = new AreaManage();
		}
		mContext = context;
		return sAreaManage;

	}

最后,在你的这个类中写你需要实现的业务。以与本地数据库交互为例:

/**
	 * 
	 * 查询数据
	 * 
	 * @param 参数说明
	 * @return 返回类型
	 * @exception 异常描述
	 * @see 需要参见的其它内容
	 * @since 从类的哪一个版本,此方法被添加进来。(可选)
	 * @deprecated该方法从类的那一个版本后,已经被其它方法替换。(可选)
	 */
	public int getDateNum() {
		try {
			String sql = "select * from " + SAreaTb.TableName;
			Cursor cr = InestigationDataBase.query(sql);

			if (cr.getCount() == 0) {
				cr.close();
				return 0;
			} else {
				int n = cr.getCount();
				cr.close();
				return n;
			}
		} catch (Exception e) {
			System.out.println(e.getMessage());
			return 1;
		}

	}


调用的方法:

AreaManage.getInstance().getDateNum()


这种方法适用大部分情况。如果碰见其它情况再补充。下面是这个类的完整代码。


package com.gytech.manage;

import java.io.Serializable;
import java.util.ArrayList;

import android.content.Context;
import android.database.Cursor;

import com.gytech.entity.SArea;
import com.gytech.tools.db.InestigationDataBase;
import com.gytech.tools.db.InestigationTable.SAreaTb;

public class AreaManage implements Serializable {

/**
* serialVersionUID:TODO(用一句话描述这个变量表示什么)
*
* @since 1.0.0
*/

private static final long serialVersionUID = 1L;
public static AreaManage sAreaManage;
public static Context mContext;

public static AreaManage getInstance() { if (sAreaManage == null) { sAreaManage = new AreaManage(); } return sAreaManage; } public static AreaManage getInstance(Context context) { if (sAreaManage == null) { sAreaManage = new AreaManage(); } mContext = context; return sAreaManage; }

/** * * 查询数据 * * @param 参数说明 * @return 返回类型 * @exception 异常描述 * @see 需要参见的其它内容 * @since 从类的哪一个版本,此方法被添加进来。(可选) * @deprecated该方法从类的那一个版本后,已经被其它方法替换。(可选) */ public int getDateNum() { try { String sql = "select * from " + SAreaTb.TableName; Cursor cr = InestigationDataBase.query(sql); if (cr.getCount() == 0) { cr.close(); return 0; } else { int n = cr.getCount(); cr.close(); return n; } } catch (Exception e) { System.out.println(e.getMessage()); return 1; } }

/**
*
* @param sqlStr
* @return
* @Description: 判断某一行的sql是否能够执行,如果sid值不存在在,或者sid对应的记录存在,则不去添加这条记录,
*/

public synchronized boolean checkHasDate(String sqlStr) {
String id = sqlStr.substring(sqlStr.indexOf("(") + 1,
sqlStr.indexOf(","));
if (id.length() == 0)
return true;
try {
String sql = "select * from " + SAreaTb.TableName + " where "
+ SAreaTb.SID + "='" + id + "'";
Cursor cr = InestigationDataBase.query(sql);

if (cr.getCount() == 0) {
cr.close();
return false;
} else {

cr.close();
return true;
}
} catch (Exception e) {
System.out.println(e.getMessage());
return true;
}

}

/**
* 更新数据
*
* @param sql语句
*/
public void inertOrUpdateDateBatch(String sql) {
try {
InestigationDataBase.insert(sql);
} catch (Exception e) {
e.printStackTrace();
} finally {
//
}

}

/**
*
* @param Sid
* @return
*/

public SArea getSAreaBySid(int Sid) {
SArea model = new SArea();

try {
String sql = "select * from " + SAreaTb.TableName + " where "
+ SAreaTb.SID + "='" + Sid + "'";
Cursor cr = InestigationDataBase.query(sql);

if (cr.moveToNext()) {
model.setSid(cr.getLong(cr.getColumnIndex(SAreaTb.SID)));
model.setAreaName(cr.getString(cr
.getColumnIndex(SAreaTb.AREA_NAME)));
model.setAeraCode(cr.getString(cr
.getColumnIndex(SAreaTb.AREA_CODE)));
model.setParentCityCode(cr.getString(cr
.getColumnIndex(SAreaTb.PARENT_CITY_CODE)));

}
cr.close();
} catch (Exception e) {
// TODO Auto-generated catch block
System.out.println(e.getMessage());
}
return model;

}

public SArea getSAreaByAreaCode(String areaCode) {
SArea model = new SArea();

try {
String sql = "select * from " + SAreaTb.TableName + " where "
+ SAreaTb.AREA_CODE + "='" + areaCode + "'";
Cursor cr = InestigationDataBase.query(sql);

if (cr.moveToNext()) {
model.setSid(cr.getLong(cr.getColumnIndex(SAreaTb.SID)));
model.setAreaName(cr.getString(cr
.getColumnIndex(SAreaTb.AREA_NAME)));
model.setAeraCode(cr.getString(cr
.getColumnIndex(SAreaTb.AREA_CODE)));
model.setParentCityCode(cr.getString(cr
.getColumnIndex(SAreaTb.PARENT_CITY_CODE)));
model.setIsLeaf(cr.getInt(cr.getColumnIndex(SAreaTb.IS_LEAF)));
}
cr.close();
} catch (Exception e) {
// TODO Auto-generated catch block
System.out.println(e.getMessage());
}
return model;

}

public ArrayList<SArea> getSAreaListByParentCityCode(String ParentDicCode) {

ArrayList<SArea> BaseClassList = new ArrayList<SArea>();
try {
String sql = "select * from " + SAreaTb.TableName + " where "
+ SAreaTb.PARENT_CITY_CODE + "='" + ParentDicCode + "'";
Cursor cr = InestigationDataBase.query(sql);
while (cr.moveToNext()) {
SArea model = new SArea();

model.setSid(cr.getLong(cr.getColumnIndex(SAreaTb.SID)));
model.setAreaName(cr.getString(cr
.getColumnIndex(SAreaTb.AREA_NAME)));
model.setAeraCode(cr.getString(cr
.getColumnIndex(SAreaTb.AREA_CODE)));
model.setParentCityCode(cr.getString(cr
.getColumnIndex(SAreaTb.PARENT_CITY_CODE)));
BaseClassList.add(model);

}

} catch (Exception e) {
// TODO Auto-generated catch block
// Sysout.printException(MarketManager.class +
// "=====获取营销活动的客户列表发生异常!", e);
System.out.println(e.getMessage());
return null;
}
//
return BaseClassList;
//
}

public SArea getByCityName(String Code) {

SArea model = new SArea();
try {

String sql = "select * from " + SAreaTb.TableName + " where "+SAreaTb.AREA_CODE + "='" + Code + "'";
Cursor cr = InestigationDataBase.query(sql);
while (cr.moveToNext()) {
model.setSid(cr.getLong(cr.getColumnIndex(SAreaTb.SID)));
model.setAreaName(cr.getString(cr
.getColumnIndex(SAreaTb.AREA_NAME)));
model.setAeraCode(cr.getString(cr
.getColumnIndex(SAreaTb.AREA_CODE)));
model.setParentCityCode(cr.getString(cr
.getColumnIndex(SAreaTb.PARENT_CITY_CODE)));
}

} catch (Exception e) {
return null;
}
return model;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: