前言:从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: Contextprivate var newsOpenHelper: NewsOpenHelperinit {context = ctxnewsOpenHelper = NewsOpenHelper(ctx)}companion object {@Volatileprivate var instance: CollectionDao? = nullfun getInstance(ctx: Context): CollectionDao {if (instance == null) {synchronized(CollectionDao::class) {if (instance == null) {instance = CollectionDao(ctx)}}}return instance!!}}//对数据库的增删改查//......
}
加油!