Kotlin中的单例

一、源代码

1.1 饿汉式

class Utils private constructor() {
    companion object {
        fun getInstance(): Utils {
            return Instance.instance
        }
    }

    private object Instance {
        val instance = Utils()
    }
}

1.2 懒汉式

class Utils private constructor() {
    companion object {
        val instance by lazy(mode = LazyThreadSafetyMode.SYNCHRONIZED) {
            Utils()
        }
    }
}

二、使用方法

2.1 java中使用

 public void useSingle() {
 		//为何如此使用,见  三、Kotlin编译至java源码
        Utils instance = Utils.Companion.getInstance();
    }

2.2 kotlin中使用

fun useSingle(){
//饿汉式
//	var instance = Utils.getInstance()
//懒汉式
	var instance = Utils.instance
}

三、Kotlin编译至java源码(饿汉式)

import kotlin.Metadata;
import kotlin.jvm.internal.DefaultConstructorMarker;
import org.jetbrains.annotations.NotNull;

@Metadata(
   mv = {1, 1, 15},
   bv = {1, 0, 3},
   k = 1,
   d1 = {"\u0000\f\n\u0002\u0018\u0002\n\u0002\u0010\u0000\n\u0002\b\u0004\u0018\u0000 \u00032\u00020\u0001:\u0002\u0003\u0004B\u0007\b\u0002¢\u0006\u0002\u0010\u0002¨\u0006\u0005"},
   d2 = {"Lcom/piaopiao/singleinstancekotlin/Utils;", "", "()V", "Companion", "Instance", "app_debug"}
)
public final class Utils {
   public static final Utils.Companion Companion = new Utils.Companion((DefaultConstructorMarker)null);

   private Utils() {
   }

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

   @Metadata(
      mv = {1, 1, 15},
      bv = {1, 0, 3},
      k = 1,
      d1 = {"\u0000\u0014\n\u0002\u0018\u0002\n\u0002\u0010\u0000\n\u0002\b\u0002\n\u0002\u0018\u0002\n\u0002\b\u0003\bÂ\u0002\u0018\u00002\u00020\u0001B\u0007\b\u0002¢\u0006\u0002\u0010\u0002R\u0011\u0010\u0003\u001a\u00020\u0004¢\u0006\b\n\u0000\u001a\u0004\b\u0005\u0010\u0006¨\u0006\u0007"},
      d2 = {"Lcom/piaopiao/singleinstancekotlin/Utils$Instance;", "", "()V", "instance", "Lcom/piaopiao/singleinstancekotlin/Utils;", "getInstance", "()Lcom/piaopiao/singleinstancekotlin/Utils;", "app_debug"}
   )
   private static final class Instance {
      @NotNull
      private static final Utils instance;
      public static final Utils.Instance INSTANCE;

      @NotNull
      public final Utils getInstance() {
         return instance;
      }

      static {
         Utils.Instance var0 = new Utils.Instance();
         INSTANCE = var0;
         instance = new Utils((DefaultConstructorMarker)null);
      }
   }

   @Metadata(
      mv = {1, 1, 15},
      bv = {1, 0, 3},
      k = 1,
      d1 = {"\u0000\u0012\n\u0002\u0018\u0002\n\u0002\u0010\u0000\n\u0002\b\u0002\n\u0002\u0018\u0002\n\u0000\b\u0086\u0003\u0018\u00002\u00020\u0001B\u0007\b\u0002¢\u0006\u0002\u0010\u0002J\u0006\u0010\u0003\u001a\u00020\u0004¨\u0006\u0005"},
      d2 = {"Lcom/piaopiao/singleinstancekotlin/Utils$Companion;", "", "()V", "getInstance", "Lcom/piaopiao/singleinstancekotlin/Utils;", "app_debug"}
   )
   public static final class Companion {
      @NotNull
      public final Utils getInstance() {
         return Utils.Instance.INSTANCE.getInstance();
      }

      private Companion() {
      }

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

Kotlin下的5种单例模式

Java:单例模式的七种写法

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值