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

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()


微风不燥,阳光正好,你就像风一样经过这里,愿你停留的片刻温暖舒心。

我是程序员小迷(致力于C、C++、Java、Kotlin、Android、Shell、JavaScript、TypeScript、Python等编程技术的技巧经验分享),若作品对您有帮助,请关注、分享、点赞、收藏、在看、喜欢,您的支持是我们为您提供帮助的最大动力。

欢迎关注。助您在编程路上越走越好!

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值