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

    在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;
	}
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值