美文网首页
kotlin - 实现静态单例的方式

kotlin - 实现静态单例的方式

作者: 前行的乌龟 | 来源:发表于2019-04-12 13:22 被阅读0次

前文带着大家看过 kotlin 实现 static 的集中方式,那么非常自然的,我们就会想到用 kotlin 实现静态单例应该怎么做,怎么做比较优雅

其实大家基本都可以想法的到,不管怎么我们都离不开 companion object 的,记住 companion object 只是生成了一个类中的静态内部类,作用只是衔接,自身不和我们写的类产生其他联系,根本我们还是要在 companion object 内部创建静态实例对象,方式也是2种,懒汉式和饿汉式,懒汉式代码上没有 java 那么繁琐,kotlin 直接提供了双重同步锁

直接看代码:

class BookKotlin {

    fun speak() {}

    companion object instance {

        // 懒汉式,使用 LazyThreadSafetyMode.SYNCHRONIZED 双重同步锁
        val one: BookKotlin by lazy(LazyThreadSafetyMode.SYNCHRONIZED) {
            BookKotlin()
        }

        // 饿汉式,上来直接赋值
        @JvmField
        val two: BookKotlin = BookKotlin()

    }
}
kotlin 中可以直接使用这2中方式的静态单例 java 中可以直接使用饿汉式声明的静态单例 java 中懒汉式声明的静态单例需要借助中介才能使用
public final class BookKotlin {

   @JvmField
   public static final BookKotlin two;
   private static final Lazy one$delegate;
   public static final BookKotlin.instance instance = new BookKotlin.instance((DefaultConstructorMarker)null);

   public final void speak() {
   }

   static {
      one$delegate = LazyKt.lazy(LazyThreadSafetyMode.SYNCHRONIZED, (Function0)null.INSTANCE);
      two = new BookKotlin();
   }


   public static final class instance {
      // $FF: synthetic field
      static final KProperty[] $$delegatedProperties = new KProperty[]{(KProperty)Reflection.property1(new PropertyReference1Impl(Reflection.getOrCreateKotlinClass(BookKotlin.instance.class), "one", "getOne()Lcom/bloodcrown/kotlintest/BookKotlin;"))};

      public final BookKotlin getOne() {
         Lazy var1 = BookKotlin.one$delegate;
         KProperty var3 = $$delegatedProperties[0];
         return (BookKotlin)var1.getValue();
      }

      private instance() {
      }

      // $FF: synthetic method
      public instance(DefaultConstructorMarker $constructor_marker) {
         this();
      }
   }
}

代码很简单,大家一看就懂,同步的部分涉及 kotlin 自身机制不再这里说明

最后吐槽,本文算的上我最短小的技术文章发了吧,但是希望大家觉得他虽短小单精悍,短就忍了,再不精悍那就不是男人了 ~

最后妹子镇楼,最近就图多,搂下的都是好图


相关文章

  • Kotlin中的标准函数和静态函数

    静态函数: kotlin中使用单例类和 companion obdect{} 两种方式来实现java中的静态 但这...

  • kotlin<第四篇>:基础(2)

    一、判空 二、let、with、run、apply、also 三、单例 kotlin 单例实现: 四、静态方法 五...

  • kotlin - 实现静态单例的方式

    前文带着大家看过 kotlin 实现 static 的集中方式,那么非常自然的,我们就会想到用 kotlin 实现...

  • C++ 单例模式

    本文介绍C++单例模式的集中实现方式,以及利弊 局部静态变量方式 上述代码通过局部静态成员single实现单例类,...

  • Kotlin单例模式使用案例

    Kotlin单例模式 1、kotlin的object就是一个单例模式,所有字段都是static静态,方法不是静态2...

  • 完美的单例

    一、常见的单例实现方式 方式一(静态常量) 方式二(内部类) 方式三(懒加载) 二、常见单例实现方式的问题 方式一...

  • kotlin实现单例模式

    1.懒汉式实现单例模式 2.线程安全懒汉式实现单例模式 3.双重校验懒汉式实现单例模式 4.静态内部类方式实现单例模式

  • java设计模式之单例模式

    单例模式属于java设计模式的一种,最常见实现方式有以下几种 懒汉、饿汉、双重检查单例、静态内部类单例。 单例模式...

  • 单例模式

    单例模式 单例模式简介基本用法Kotlin 不带参Kotlin 带参饿汉式懒汉式双重校验锁静态内部类枚举集合管理问...

  • 单例模式

    饿汉模式: 懒汉模式: Double CheckLock(DCL)实现单例 静态内部类实现单例 枚举单例 使用容器...

网友评论

      本文标题:kotlin - 实现静态单例的方式

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