一、饿汉模式
//Java实现
public class Singleton {
private static Singleton instance=new Singleton();
private Singleton(){}
public static Singleton getInstance(){
return instance;
}
}
//Kotlin实现
object SingletonDemo{}
二、懒汉模式
//Java实现
public class Singleton {
private static Singleton instance;
private Singleton(){}
public static Singleton getInstance(){
if(instance==null){
instance=new Singleton();
}
return instance;
}
}
//kotlin实现
方式一、构造方法无参数
class Singleton private constructor(){
companion object{
val instance: Singleton by lazy { Singleton() }
}
}
方式二、构造方法携带参数
class Singleton private constructor(id: String){
companion object{
private var mInstance: Singleton? = null
fun getInstance(id: String): Singleton{
return mInstance ?: Singleton(id).also { mInstance = it }
}
}
}
三、线程安全懒汉模式
//Java实现
public class Singleton {
private static Singleton instance;
private Singleton(){}
public static synchronized Singleton getInstance(){
if(instance==null){
instance=new Singleton();
}
return instance;
}
}
//kotlin实现
方式一、构造函数无参数
class Singleton private constructor(){
companion object{
private val mInstance: Singleton by lazy { Singleton() }
@Synchronized
fun getInstance(): Singleton{
return mInstance
}
}
}
方式二、构造函数有参数
class Singleton private constructor(id: String){
companion object{
private var mInstance: Singleton? = null
@Synchronized
fun getInstance(id: String): Singleton{
return mInstance ?: Singleton(id).also { mInstance = it }
}
}
}
四、双重校验锁模式
//Java实现
public class Singleton {
private static Singleton instance;
private Singleton(){}
public static Singleton getInstance(){
if(instance==null){
synchronized (Singleton.class){
if(instance==null){
instance=new Singleton();
}
}
}
return instance;
}
}
//kotlin实现
方式一、构造函数无参数
class Singleton private constructor(){
companion object{
val instance: Singleton by lazy(mode = LazyThreadSafetyMode.SYNCHRONIZED) {
Singleton() }
}
}
方式二、构造函数有参数
class Singleton private constructor(id: String){
companion object{
private var mInstance: Singleton? = null
fun getInstance(id: String): Singleton{
return mInstance?: synchronized(this){
mInstance?: Singleton(id).also { mInstance = it }
}
}
}
}
五、静态内部类
//Java实现
public class Singleton {
private static class SingletonHolder{
private static Singleton instance=new Singleton();
}
private Singleton(){
}
public static Singleton getInstance(){
return SingletonHolder.instance;
}
}
//kotlin实现
class Singleton private constructor() {
companion object {
val instance = SingletonHolder.holder
}
private object SingletonHolder {
val holder= Singleton()
}
}
六、java调用kotlin单例
1、object创建的单例
Singleton.INSTANCE.test();
2、companion创建的单例
Singleton.Companion.getInstance().test();