前言:从java转到Kotlin是编写代码风格上是非常的不习惯,特别是单例模式传参的时候,是比较头疼的。这次就介绍一下可以进行传参的线程安全的懒汉式写法。大家也可以参考这个人写的《Kotlin下的5种单例模式》
以CollectionDao的增删改查为例子
在java中我们通常这样做(线程安全的懒汉式)
public class CollectionDao {
//2 声明一个对象
private static CollectionDao sInstance = null;
private Context mContext;
private CollectionOpenHelper mHelper;
//1 私有的构造方法
private CollectionDao(Context context) {
mContext = context;
mHelper = new CollectionOpenHelper(context);
}
// 3公开方法获取对象
public static CollectionDao getInstance(Context ctx) {
if (sInstance == null) {
synchronized (CollectionDao.class) {
if (sInstance == null) {
sInstance = new CollectionDao(ctx);
}
}
}
return sInstance;
}
//对数据库的增删改查
//......
}
在Kotlin可以这样写(线程安全的懒汉式)
class CollectionDao private constructor(ctx: Context) {
private var context: Context
private var newsOpenHelper: NewsOpenHelper
init {
context = ctx
newsOpenHelper = NewsOpenHelper(ctx)
}
companion object {
@Volatile
private var instance: CollectionDao? = null
fun getInstance(ctx: Context): CollectionDao {
if (instance == null) {
synchronized(CollectionDao::class) {
if (instance == null) {
instance = CollectionDao(ctx)
}
}
}
return instance!!
}
}
//对数据库的增删改查
//......
}
加油!