Kotlin的5種單利寫法和java對比

​​​​​​主要單例模式實現如下:

  • 餓漢式
  • 懶漢式
  • 線程安全的懶漢式
  • 雙重校驗鎖式
  • 靜態內部類式

一,餓漢式實現

(1)java惡漢式

public class Singleton{
    public static final Singleton instance = new Singleton();
    public static Singleton getInstance() {
        return instance;
    }
}

(2)Kotlin餓漢式

//kotlin單例
object Singleton{

}

 

二,懶漢式實現

(1)java懶漢式

//Java實現
public class Singleton {
    private static Singleton instance;
    private Singleton(){}

    public static Singleton getInstance(){
        if(instance==null){
            instance=new Singleton();
        }
        return instance;
    }
}

(2)kotlin懶漢式

//Kotlin實現
class Singleton private constructor() {
    companion object {
        private var instance: Singleton? = null
            get() {
                if (field == null) {
                    field = Singleton()
                }
                return field
            }
        fun get(): Singleton {
            return instance!!
        }
    }
}

 

三,線程安全的懶漢式

(1)java線程安全的懶漢式

//Java實現
public class Singleton {
    private static Singleton instance;
    private Singleton(){}
    public static synchronized Singleton getInstance(){//使用同步鎖
        if(instance==null){
            instance=new Singleton();
        }
        return instance;
    }
}

(2)kotlin線程安全的懶漢式

//Kotlin實現
class Singleton private constructor() {
    companion object {
        private var instance: Singleton? = null
            get() {
                if (field == null) {
                    field = Singleton()
                }
                return field
            }
        @Synchronized   //引入 org.jetbrains.kotlin:kotlin-stdlib-jdk7
        fun get(): Singleton{
            return instance!!
        }
    }
}

 

四,雙重校驗鎖式

(1)java雙重校驗鎖式

//Java實現
public class Singleton {
    private volatile static Singleton instance;
    private Singleton(){}
    public static Singleton getInstance(){
        if(instance==null){
            synchronized (Singleton.class){
                if(instance==null){
                    instance=new Singleton();
                }
            }
        }
        return instance;
    }
}

(2)kotlin雙重校驗鎖式

//kotlin實現
class Singleton private constructor() {
    companion object {
        val instance: Singleton by lazy(mode = LazyThreadSafetyMode.SYNCHRONIZED) {
            Singleton()
        }
    }
}

 

五,靜態內部類式

(1)java靜態內部類式

//Java實現
public class Singleton {
    private static class SingletonHolder {
        private static Singleton instance = new Singleton();
    }

    private Singleton() {
        System.out.println("Singleton has loaded");
    }

    public static Singleton getInstance() {
        return SingletonHolder.instance;
    }
}

(2)kotlin靜態內部類式

//kotlin實現
class Singleton private constructor() {
    companion object {
        val instance = SingletonHolder.holder
    }

    private object SingletonHolder {
        val holder = Singleton()
    }
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章