Kotlin单例模式你不知道的秘密花园

程序员小迷 2024-04-07 14:37:58

1.使用object关键字(饿汉式)

这种方式创建的对象在第一次访问时初始化,并且是线程安全的。

object Singleton {

fun process() {

}

}

// 使用方式

Singleton.process()

2. 使用synchronized实现线程安全的单例(懒汉式)

可以在Kotlin中使用synchronized关键字来确保线程安全。

1)实现方式一

class Singleton private constructor() {

fun process() {

}

companion object {

@Volatile

private var instance: Singleton? = null

fun getInstance(): Singleton {

if(null == instance){

synchronized(this) {

if (null == instance) {

instance = Singleton()

}

}

}

return instance!!

}

}

}

// 使用方式

Singleton.getInstance().process()

2)实现方式二

class Singleton private constructor() {

fun process() {

}

companion object {

private var instance: Singleton? = null

get() {

if (field == null) {

field = Singleton()

}

return field

}

@Synchronized

fun get(): Singleton{

return instance!!

}

}

}

// 使用方式

Singleton.get().process()

3. 使用lazy代理

如果你有一个需要参数的类,或者想要延迟加载类实例,或者你想更精细地控制初始化过程,则可以使用lazy代理。此方式是线程安全的。

class Singleton private constructor() {

fun process() {

}

companion object {

val instance: Singleton by lazy(mode = LazyThreadSafetyMode.SYNCHRONIZED) {

Singleton()

}

}

}

// 使用方式

Singleton.instance.process()

4.静态内部类式

避免类加载的时候初始化单例。

class Singleton private constructor() {

fun process() {

}

companion object {

val instance = SingletonHolder.holder

}

private object SingletonHolder {

val holder= Singleton()

}

}

// 使用方式

Singleton.instance.process()

若作品对您有帮助,请关注、分享、点赞、收藏、在看、喜欢。您的支持是我们为您提供帮助的最大动力。

1.想学习更多知识,您可以关注公众号:程序员小迷(一个关注于软件开发技能技巧经验的公众号)

miniminicode

或扫码:

2.您还可以访问迷软科技网站:https://wp.minicoda.com

或扫码:

0 阅读:2

程序员小迷

简介:致力于Android、iOS、C、Java等编程技术的技巧经验分享