Kotlin开发Android App和Java的差异3----Kotlin中的单例设计模式(简单封装Retrofit)

个人淘宝店铺需要的可以点进来

1 委托

1.1 类委托

类委托,就是一个类实现了一个方法,但是委托另一个类来执行这个方法,这种方式的意义在哪,目前不太清楚,存在就是合理的吧

interface IA{
    fun run()
}

class II : IA{

    override fun run() {
        println("II 的run方法")
    }
}

class BB(ia:IA) : IA by ia

这样看起来有点儿像Java中的多态,可以传入不同的IA接口实现类,执行各自的方法

1.2 属性委托

这个可能会是Kotlin中最常使用的委托方式;属性委托就是类中的属性不是在当前类中直接定义,而是通过一个代理类定义

1.3 标准委托

Kotlin的标准库Delegate中定义了很多委托类型

1.3.1 Lazy延迟属性

lazy是一个函数,可以接收一个lambda表达式作为参数,返回一个Lazy<T>函数,作为延迟属性的委托,在第一次调用这个属性的时候会执行lambda表达式,第二次就会直接返回记录的结果,这种特性就是单例模式的最好实现

class Note{

    init {
        println("初始化")
    }

    companion object {

        val lazyValue:Note by lazy(mode = LazyThreadSafetyMode.SYNCHRONIZED) {

            Note()
        }
    }

	var name : String by Delegates.observable("小明"){

       property, oldValue, newValue ->

       println("旧值$oldValue  新值$newValue")
   }
}

当创建Note实例的时候,第一次调用的时候,会执行init代码块,第二次创建对象时,就直接返回了结果,不会再次执行初始化操作

像这样一行代码写出一个Java的双检锁单例模式,岂不是节省了太多的时间

1.3.2 可观察属性Observable

可观察属性使用的就是Kotlin中Delegates的observable属性,可以设置初始值 ”小明“,当外界调用修改name属性的时候,就会执行这个onChange监听

Note.lazyValue.name = "小同安"

输出:旧值小明  新值小同安

1.4 单例模式封装Retrofit

class NetWorkManager private construct() {

    private var _retrofit:Retrofit

    init {

        Log.e("TAG","一些初始化操作")

        _retrofit = Retrofit.Builder()
            .baseUrl("https://5e510330f2c0d300147c034c.mockapi.io/")
            .addConverterFactory(GsonConverterFactory.create(Gson()))
            .build()
    }

    companion object{

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

            NetWorkManager()
        }
    }

    fun <T> create(cls:Class<T>):T{

       return _retrofit.create(cls)
    }
}

其中通过委托代理lazy创建单例模式不用多说了,NetWorkManager是一个单例,内存中只存在一个;
init在NetWorkManager类加载的时候会执行,且只会执行一次,由于NetWorkManager是一个单例,因此init代码块也只能执行一次,可以做一些初始化的操作,例如构建Retrofit,这种在内存中也只会Build一次;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Awesome_lay

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值