关于单例模式的介绍可以看这篇文章:
http://cantellow.iteye.com/blog/838473
就拿第一种做例子,懒汉式
public class SingleTon {
private static SingleTon instance;
private SingleTon (){}
public static SingleTon getInstance() {
if (instance == null) {
instance = new SingleTon();
}
return instance;
}
}
先来看个小例子
class Test private constructor() {
var ddd: String = "aaa"//1
get() {
//2
if ("aaa".equals(field))
return "bbbb"
return field.toString()
}
init {
//3
ddd = "ddd"
println(ddd)
ddd = "fff"
}
companion object{
var kkk:String = Test().ddd//4
}
}
因为kotlin的构造函数有The primary constructor cannot contain any code.这个原则,所以初始化部分都放在init代码块中
如果要打印Test.kkk的话那么执行顺序为4->1->3->2
所以用kotlin写的单例就可以是这样的:
class SingleTon private constructor() {
private var s: SingleTon? = null
get() {
if (field == null)
return SingleTon()
return field
}
companion object {
private var ins: SingleTon? = SingleTon().s
public final fun getInstance(): SingleTon? {
return ins
}
}
}