Kotlin中单例模式和Java的对比浅析

所属分类: 软件编程 / Android 阅读数: 74
收藏 0 赞 0 分享

前言

单例模式,一直以来是我们在日常开发中最常用的一种设计模式,更是面试中非常重要,也非常容易被问到的问题。在日常开发中,大家常用的语言还是Java,但今天我给大家带来的是在Kotlin语言中,单例模式是怎么编写的,并且会对比Java方式,下面话不多说了,来一起看看详细的介绍吧

一、懒人写法(恶汉式)

java中

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

kotlin中

最简单的写法,直接用object声明

object Singleton{}

二、基本懒加载(未实现线程同步)

注:这种方式实现了懒加载,但是不是线程安全的,可能在多个线程中创建多个不同的实例

java中

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

kotlin中

class Singleton private constructor{
 companion object {
   val intance by lazy(LazyThreadSafetyMode.NONE) { Singleton() }
 }
}

三、线程同步单例1

注:其实kotlin这种写法可以说是java直译过来的,虽说是线程安全的,但是太影响效率,主要看下面这种

java中

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

kotlin中

class Singleton private constructor(){
  companion object {
   lateinit var instance: Singleton
   @Synchronized
   fun get(): Singleton {
     if (instance == null) {
       instance = Singleton();
      }
    return instance!!
   }
  }
}

四、线程同步单例2

注:线程同步,懒加载,无同步引起的效率问题

java中双检锁单例

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

kotlin

class Singleton private constructor(){
  companion object {
   val intance by lazy(LazyThreadSafetyMode.SYNCHRONIZED) { Singleton() }
 }
}

五、静态内部类单例

java中

public class Singleton {
 private Singleton (){}
 private static class Holder {
 private static Singleton instance = new Singleton();
 }
 public static Singleton getInstance(){
  return Holder.instance;
 }
}

kotlin中

class Singleton private constructor(){
  companion object {
   fun getInstance(): Singleton {
    return Holder.instance
   }
  }
  private object Holder {
   val instance = Singleton()
  }
 }

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对脚本之家的支持。

更多精彩内容其他人还在看

Android网络编程之获取网络上的Json数据实例

这篇文章主要介绍了Android网络编程之获取网络上的Json数据实例,本文用完整的代码实例讲解了在Android中读取网络中Json数据的方法,需要的朋友可以参考下
收藏 0 赞 0 分享

Android中的windowSoftInputMode属性详解

这篇文章主要介绍了Android中的windowSoftInputMode属性详解,本文对windowSoftInputMode的9个属性做了详细总结,需要的朋友可以参考下
收藏 0 赞 0 分享

Android网络编程之UDP通信模型实例

这篇文章主要介绍了Android网络编程之UDP通信模型实例,本文给出了服务端代码和客户端代码,需要的朋友可以参考下
收藏 0 赞 0 分享

Android中使用ListView实现漂亮的表格效果

这篇文章主要介绍了Android中使用ListView实现漂亮的表格效果,本文用详细的代码实例创建了一个股票行情表格,需要的朋友可以参考下
收藏 0 赞 0 分享

Android中刷新界面的二种方法

这篇文章主要介绍了Android中刷新界面的二种方法,本文使用Handler、postInvalidate两种方法实现界面刷新,需要的朋友可以参考下
收藏 0 赞 0 分享

Android SDK三种更新失败及其解决方法

这篇文章主要介绍了Android SDK三种更新失败及其解决方法,需要的朋友可以参考下
收藏 0 赞 0 分享

Android学习笔记——Menu介绍(一)

Android3.0(API level 11)开始,Android设备不再需要专门的菜单键。随着这种变化,Android app应该取消对传统6项菜单的依赖。取而代之的是提供anction bar来提供基本的用户功能
收藏 0 赞 0 分享

Android学习笔记——Menu介绍(二)

这次将继续上一篇文章没有讲完的Menu的学习,上下文菜单(Context menu)和弹出菜单(Popup menu)
收藏 0 赞 0 分享

Android学习笔记——Menu介绍(三)

今天继续昨天没有讲完的Menu的学习,主要是Popup Menu的学习,需要的朋友可以参考下
收藏 0 赞 0 分享

Android显示网络图片实例

这篇文章主要介绍了Android显示网络图片的方法,以实例形式展示了Android程序显示网络图片的方法,非常具有实用价值,需要的朋友可以参考下
收藏 0 赞 0 分享
查看更多