如何在android中使用参数设计lazy holder模式?
我想知道如何用参数设计lazyholder单例模式。 我只知道没有争论的时候,但不知道有争论的时候。 当construct如何在android中使用参数设计lazy holder模式?,android,Android,我想知道如何用参数设计lazyholder单例模式。 我只知道没有争论的时候,但不知道有争论的时候。 当constructprivate static final DBHelper INSTANCE=new DBHelper()时,问题如下所示 我怎样才能解决它 public DBHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) { super(con
private static final DBHelper INSTANCE=new DBHelper()时,问题如下所示代码>
我怎样才能解决它
public DBHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
super(context, name, factory, version);
this.context=context;
}
public static DBHelper getInstance(){
return DBHelper.DBHelperHolder.INSTANCE;
}
private static class DBHelperHolder{
private static final DBHelper INSTANCE = new DBHelper();
}
您可以使用DCL模式,例如:
public class DBHelper {
private static volatile DBHelper instance;
public static DBHelper getInstance(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
if (instance == null) {
synchronized (DBHelper .class) {
if (instance == null) {
instance = new DBHelper(context, name, factory, version);
}
}
}
return instance;
}
}
但是,除了@bracadbra的答案之外,每次调用getInstance
时都需要提供参数
- 建议添加
私有构造函数()
- 我更喜欢
LOCK
对象进行synchronization
(线程安全)
- 我们还应该限制
clone()
调用,以便外部代码不能通过.clone()
调用来克隆此类。因此,重写clone()
方法并从中返回CloneNotSupportedException()
public class DBHelper {
private static DBHelper instance;
// LOCK object for synchronisation
private static Object LOCK = new Object();
// Private Constructor
private DBHelper() { }
public static DBHelper getInstance(Context context, String name,
SQLiteDatabase.CursorFactory factory, int version) {
if (instance == null) {
synchronized (LOCK) {
if (instance == null) {
instance = new DBHelper(context, name, factory, version);
}
}
}
return instance;
}
@Override
protected DBHelper clone() throws CloneNotSupportedException {
return CloneNotSupportedException();
}
这是否回答了您的问题?如果我的回答解决了你的问题,请接受我的回答。谢谢