Kotlin 单例实践

方式一: object实现单例(饿汉式)

object SimpleSington {
  fun test() {}
}

//在Kotlin里调用
SimpleSington.test()

//在Java中调用
SimpleSington.INSTANCE.test();

真正的实现类似于这样:

public final class SimpleSington {
   public static final SimpleSington INSTANCE;

   private SimpleSington() {
      INSTANCE = (SimpleSington)this;
   }

   static {
      new SimpleSington();
   }
}

注意:

  • 如果构造方法中存在过多的处理,会导致加载这个类时比较慢,可能引起性能问题。
  • 如果使用饿汉式的话,只进行了类的装载,并没有实质的调用,会造成资源的浪费。

方式二: 懒汉式加载

class LazySingleton private constructor(){
    companion object {
        val instance: LazySingleton by lazy { LazySingleton() }
    }
}
  • 显式声明构造方法为private
  • companion object用来在class内部声明一个对象
  • LazySingleton的实例instance 通过lazy来实现懒汉式加载
  • lazy默认情况下是线程安全的,这就可以避免多个线程同时访问生成多个实例的问题

选择方式

对于实例初始化花费时间较少,并且内存占用较低的话,应该使用object形式的饿汉式加载。否则使用懒汉式。

参考:Kotlin中的单例模式

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 单例模式(SingletonPattern)一般被认为是最简单、最易理解的设计模式,也因为它的简洁易懂,是项目中最...
    成热了阅读 4,299评论 4 34
  • 在一个方法内部定义的变量都存储在栈中,当这个函数运行结束后,其对应的栈就会被回收,此时,在其方法体中定义的变量将不...
    Y了个J阅读 4,447评论 1 14
  • 【学习难度:★☆☆☆☆,使用频率:★★★★☆】直接出处:单例模式梳理和学习:https://github.com/...
    BruceOuyang阅读 699评论 1 2
  • 1 单例模式的动机 对于一个软件系统的某些类而言,我们无须创建多个实例。举个大家都熟知的例子——Windows任务...
    justCode_阅读 1,484评论 2 9
  • 精炼的文字总是让人满心欢喜 寥寥几句就可以把意思表达清楚 在他人看来可能不近人情 可在时间看来这是最划算的
    dnnxwm阅读 161评论 0 0