Kotlin - 单例模式

文/ZYRzyr
原文链接:http://www.jianshu.com/p/b314ddce4d69

本文列举了几种自己常用的单例模式的写法:

1.懒加载 (★★★★★)

class ApiClient private constructor() {
    private object Holder {
        val INSTANCE = ApiClient()
    }

    companion object {
        val instance: ApiClient by lazy { Holder.INSTANCE }
    }
}

使用val apiClient = ApiClient.instance
注意:虽然val apiClient = ApiClient,这样写编译不会报错,但其apiClient无法调用本类自定义的方法。

2.枚举 (★★★★)

enum class ApiClient {
    INSTANCE;
}

使用:val apiClient = ApiClient.INSTANCE

3.对象声明 (★★★)

object ApiClient {
    fun yourMethod() {
        //...
    }
}

使用:val apiClient = ApiClient

4.加同步锁 (★★★)

class ApiClient private constructor(str: String) {
    private var string: String = str

    companion object {
        private var instance: ApiClient? = null
        fun getInstance(s: String): ApiClient? {
            if (instance == null) {
                synchronized(ApiClient::class) {
                    instance = ApiClient(s)
                }
            }
            return instance
        }
    }
}

使用:val apiClient = ApiClient.getInstance("123"),不需要传参将参数删掉即可。

最后

推荐指数(★)仅个人喜好,仅供参考。

原文作者/ZYRzyr
原文链接:http://www.jianshu.com/p/b314ddce4d69

请进入这里获取授权:https://101709080007647.bqy.mobi

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容