单例模式是一种常用的软件设计模式。在它的核心结构中只包含一个被称为单例的特殊类。通过单例模式可以保证系统中一个类只有一个实例。
使用场景:
比如用户登陆注册以及其他操作,用户就可以设计成单例模式!
保证一个类是单例模式需要三个方面:
1.构造函数必须私有
2.必须有一个静态private此类型的对象,
3.必须有一个生成这对象的public 静态函数,供外界获取
一个简单的例子:
public class Singleton implements Serializable{
/* 私有构造方法,防止被实例化 */
private Singleton() {
}
/* 此处使用一个内部类来维护单例 */
private static class SingletonFactory {
private static Singleton instance = new Singleton();
}
/* 获取实例 */
public static Singleton getInstance() {
return SingletonFactory.instance;
}
/* 如果该对象被用于序列化,可以保证对象在序列化前后保持一致 */
public Object readResolve() {
return getInstance();
}
}
android 原生代码中,使用单例模式的也有很多,比如在日历中: \packages\providers\CalendarProvider\src\com\android\providers\calendar\ CalendarDatabaseHelper.java
/* package */ class CalendarDatabaseHelper extends SQLiteOpenHelper {
...
private static CalendarDatabaseHelper sSingleton = null;
...
public static synchronized CalendarDatabaseHelper getInstance(Context context) {
if (sSingleton == null) {
sSingleton = new CalendarDatabaseHelper(context);
}
return sSingleton;
}
/**
* Private constructor, callers except unit tests should obtain an instance through
* {@link #getInstance(android.content.Context)} instead.
*/
/* package */ CalendarDatabaseHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
if (LOGD) Log.d(TAG, "Creating OpenHelper");
mSyncState = new SyncStateContentProviderHelper();
}
}
就这样子咯!