KotlinKotlin编程Kotlin从入门到放弃

Kotlin - 单例模式

2017-09-04  本文已影响1095人  ZYRzyr

文/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

上一篇 下一篇

猜你喜欢

热点阅读