Java实现不同单例模式对应在Kotlin中的实现

312 阅读1分钟

常见的五种单例模式

  • 饿汉式
  • 懒汉式
  • 线程安全的懒汉式
  • 双重校验锁式
  • 静态内部类式
一、饿汉实现方式
//Java实现
public class SingletonDemo {  
    private static SingletonDemo instance=new SingletonDemo();  
    private SingletonDemo(){  
  
    }  
    public static SingletonDemo getInstance(){  
        return instance;  
    }  
}

//Kotlin实现
object SingletonDemo
二、懒汉实现方式

Kotlin知识点:函数属性与字段

//Java实现
public class SingletonDemo {  
    private static SingletonDemo instance;  
    private SingletonDemo(){}  
    public static SingletonDemo getInstance(){  
        if(instance == null){  
            instance = new SingletonDemo();  
        }  
        return instance;  
    }  
}

//Kotlin实现
class SingletonDemo private constructor() {  
    companion object {  
        private var instance: SingletonDemo? = null  
            get() {  
                if (field == null) {  
                    field = SingletonDemo()  
                }  
                return field  
            }  
        fun get(): SingletonDemo{  
        //这里不用getInstance作为为方法名,是因为在伴生对象声明时,内部已有getInstance方法,所以只能用其他名字
         return instance!!  
        }  
    }  
}
三、线程安全的懒汉实现方式
//Java实现
public class SingletonDemo {  
    private static SingletonDemo instance;  
    private SingletonDemo(){}  
    //使用同步锁 
    public static synchronized SingletonDemo getInstance(){ 
        if(instance == null){  
            instance = new SingletonDemo();  
        }  
        return instance;  
    }  
}

//Kotlin实现
class SingletonDemo private constructor() {  
    companion object {  
        private var instance: SingletonDemo? = null  
            get() {  
                if (field == null) {  
                    field = SingletonDemo()  
                }  
                return field  
            }  
        //方法声明为同步,需要添加@Synchronized注解    
        @Synchronized  
        fun get(): SingletonDemo{  
            return instance!!  
        }  
    }  
}
四、双重校验锁实现方式(Double Check)

Kotlin知识点:高阶函数属性委托

//Java实现
public class SingletonDemo {  
    private volatile static SingletonDemo instance;  
    private SingletonDemo(){}   
    public static SingletonDemo getInstance(){  
        if(instance == null){  
            synchronized (SingletonDemo.class){  
                if(instance == null){  
                    instance = new SingletonDemo();  
                }  
            }  
        }  
        return instance;  
    }  
}

//Kotlin实现
class SingletonDemo private constructor() {  
    companion object {  
        val instance: SingletonDemo by lazy(mode = LazyThreadSafetyMode.SYNCHRONIZED) {  
        SingletonDemo() }  
    }  
}
五、静态内部类实现方式
//Java实现
public class SingletonDemo {  
    private static class SingletonHolder{  
        private static SingletonDemo instance = new SingletonDemo();  
    }  
    private SingletonDemo(){  
        System.out.println("Singleton has loaded");  
    }  
    public static SingletonDemo getInstance(){  
        return SingletonHolder.instance;  
    }  
}

//Kotlin实现
class SingletonDemo private constructor() {  
    companion object {  
        val instance = SingletonHolder.holder  
    }  
  
    private object SingletonHolder {  
        val holder = SingletonDemo()  
    }  
}

其他分享

  1. Android 常规基础面试题分享
  2. Kotlin日常高效编程技巧和作用域函数的使用。
  3. Kotlin 官方文档 中文版