栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Kotlin开发Android App和Java的差异3----Kotlin中的单例设计模式

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Kotlin开发Android App和Java的差异3----Kotlin中的单例设计模式

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函数,作为延迟属性的委托,在第一次调用这个属性的时候会执行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 = "小同安"

输出:旧值小明  新值小同安
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/631975.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号