美文网首页
Kotlin单例

Kotlin单例

作者: zghbhdxw | 来源:发表于2020-12-29 23:51 被阅读0次

java时的单例模式

https://juejin.cn/post/6844903590545326088
饿汉式
懒汉式
线程安全的懒汉式
双重校验锁式
静态内部类式

我们参考java单例方式,对应实现kotlin单例方式

饿汉模式

Java实现

public class SingleClass {
    private static SingleClass instance=new SingleClass();
    private SingleClass(){

    }
    public static SingleClass getInstance(){
        return instance;
    }
}

Kotlin实现

object SingleClass

解释
在Kotlin中类没有静态方法。如果要实现java的静态方法并能访问类静态成员的效果,可以把该类声明为一个对象,类似java中的静态成员 【详细了解】。
如上面的类对象实现如下:

public final class SingleClass {
   public static final SingleClass INSTANCE;
   private SingleClass(){}
   static {
      SingleClass var0 = new SingleClass();
      INSTANCE = var0;
   }
}

懒汉模式

Java实现

public class SingleClass {
    private static SingleClass instance;
    private SingleClass(){}
    public static SingleClass getInstance(){
        if(instance==null){
            instance=new SingleClass();
        }
        return instance;
    }
}

Kotlin实现

class SingleClass private constructor() {
    companion object {
        private var instance: SingleClass? = null
            get() {
                if (field == null) {
                    field = SingleClass()
                }
                return field
            }
        fun getSingle(): SingleClass { // 内部已有getInstance方法提供伴生对象用
          return instance!!
        }
    }
}

线程安全的懒汉式

Java实现

public class SingleClass {
    private static SingleClass instance;
    private SingleClass(){}
    public static synchronized SingleClass getInstance(){
        if(instance==null){
            instance=new SingleClass();
        }
        return instance;
    }
}

Kotlin实现

class SingleClass private constructor() {
    companion object {
        private var instance: SingleClass? = null
            get() {
                if (field == null) {
                    field = SingleClass()
                }
                return field
            }
        // kotlin 同步方式
        @Synchronized
        fun get(): SingleClass{
            return instance!!
        }
    }

}

双重校验锁式

Java实现

public class SingleClass {
    private volatile static SingleClass instance;
    private SingleClass(){} 
    public static SingleClass getInstance(){
        if(instance==null){
            synchronized (SingleClass.class){
                if(instance==null){
                    instance=new SingleClass();
                }
            }
        }
        return instance;
    }
}

kotlin实现

class SingleClass private constructor() {
    companion object {
        val instance: SingleClass by lazy {
        SingleClass() }
    }
}

静态内部类

Java实现

public class SingleClass {
    private static class SingleHolder{
        private static SingleClass instance=new SingleClass();
    }
    private SingleClass() {}
    public static SingleClass getInstance(){
        return SingleHolder.instance;
    }
}

kotlin实现

class SingleClass private constructor() {
    companion object {
        val instance = SingleHolder.holder
    }

    private object SingleHolder {
        val holder= SingleClass()
    }

}

相关文章

网友评论

      本文标题:Kotlin单例

      本文链接:https://www.haomeiwen.com/subject/nuqcoktx.html