首页 > 其他分享 >Android-Kotlin-单例模式

Android-Kotlin-单例模式

时间:2023-06-22 14:37:11浏览次数:38  
标签:Kotlin Dog var 参数 单例 println Android dog2 dog1


先看一个案例,非单例模式的案例:

描述Dog对象:

package cn.kotlin.kotlin_oop08

class Dog(var name:String, var color:String) {

    /**
     * 显示狗狗的名字
     */
    fun showDogName() {
        println("狗狗的名字是:${this.name}")
    }

    /**
     * 显示狗狗的颜色
     */
    fun showDogColor() {
        println("狗狗的颜色是:${color}")
    }
}

main测试:

package cn.kotlin.kotlin_oop08

fun main(args: Array<String>) {

    /**
     * Dog("小白", "纯白色") 相当于Java中的 new Dog("小白", "纯白色");
     */
    var dog1 = Dog("小白", "纯白色")
    dog1.showDogName()
    dog1.showDogColor()

    println("----------------------")

    /**
     * Dog("小黑", "黑色") 相当于Java中的 new Dog("小黑", "黑色");
     */
    var dog2 = Dog("小黑", "黑色")
    dog2.showDogName()
    dog2.showDogColor()

    println("----------------------")

    /**
     * 以上代码 由于实例化了 两次Dog() 所以他们的引用肯定是不一样的,所以打印false
     */
    println(dog1 == dog2)

    /**
     * 实例化对象10次
     * 以下代码相当于Java中 new Dog() 10次
     */
    Dog("参数1", "参数2")
    Dog("参数1", "参数2")
    Dog("参数1", "参数2")
    Dog("参数1", "参数2")
    Dog("参数1", "参数2")
    Dog("参数1", "参数2")
    Dog("参数1", "参数2")
    Dog("参数1", "参数2")
    Dog("参数1", "参数2")
    Dog("参数1", "参数2")

}

执行结果:

Android-Kotlin-单例模式_Java



以上的 (非单例模式的案例),每当执行Dog() ,就会实例化一个对象,如果多次调用,或者 多个地方调用,会多次实例化,所以需要采用当例模式(只实例化一次)
单例模式案例

描述Dog对象 把class Dog { 修改成>> object Dog { 后 颜色变成黄色了:

Android-Kotlin-单例模式_单例模式_02


把class Dog { 修改成>> object Dog { 后 就属于单例模式了,只实例化一次

package cn.kotlin.kotlin_oop08

/**
 * 把class Dog {  修改成了>>  object Dog { 后 在JVM中只会实例化一次,可以理解为当例模式
 */
object Dog {

    var name:String = ""
    var color:String = ""

    /**
     * 显示狗狗的名字
     */
    fun showDogName() {
        println("狗狗的名字是:${name}")
    }

    /**
     * 显示狗狗的颜色
     */
    fun showDogColor() {
        println("狗狗的颜色是:${color}")
    }
}

main测试:

package cn.kotlin.kotlin_oop08

fun main(args: Array<String>) {

    var dog1 = Dog
    dog1.name = "小白"
    dog1.color = "纯白色"
    dog1.showDogName()
    dog1.showDogColor()

    println("----------------------")

    var dog2 = Dog
    dog2.name = "小黑"
    dog2.color = "黑色"
    // dog2.showDogName()
    // dog2.showDogColor()
    // 也可以这样调用方法
    Dog.showDogName()
    Dog.showDogColor()

    println("----------------------")

    /**
     * 以上代码 由于只实例化了1次Dog() 所以他们的引用肯定是一样的,所以打印true
     */
    println(dog1 == dog2)

    /**
     * 永远实例化对象一次
     */
    Dog
    Dog
    Dog
    Dog
    Dog
    Dog
    Dog
    Dog
    Dog
    Dog

}

执行结果:

Android-Kotlin-单例模式_单例模式_03


标签:Kotlin,Dog,var,参数,单例,println,Android,dog2,dog1
From: https://blog.51cto.com/u_16163510/6534855

相关文章

  • Android-Kotlin-枚举ENUM
    为什么要用枚举?枚举的好处有:1.使程序更容易编写和维护2.防止用户乱输入,是一种约束来看两个案例案例一星期:星期的枚举:enumclass类名{}packagecn.kotlin.kotlin_oop09/***定义星期的枚举类*/enumclassMyEnumerateWeek{星期一,星期二,星期三,星......
  • Android-Kotlin-函数表达式&String与int转换$异常处理
    Kotlin的函数表达式:packagecn.kotlin.kotlin_base03/***函数第一种写法*/funaddMethod1(number1:Int,number2:Int):Int{returnnumber1+number2}/***函数第二个种写法*/funaddMethod2(number1:Int,number2:Int)=number1+number2/***......
  • Android-kotlin-接口与多态的表现
    上一篇博客介绍了Android-Kotlin-抽象类与多态的表现;而这一篇博客专门介绍下接口与多态的表现1.选择包名,然后右键:2.选择Class类型,会有class:3.选择File类型,不会自动有class:5.选择interface,是创建接口:6.目录结构:1.定义手机充电接口标准规范InterfacePhone:packagecn.kotlin.kot......
  • Android Xml文件生成,Xml数据格式写入
    生成xml文件格式数据,Android提供了Xml.newSerializer();,可以理解为Xml序列化;序列化:把内存里面的数据(file,databases,xml等等)丢给某一个地方; 反序列化:把某个地方的数据(file,databases,xml等等),拿到内存中;既然是Android操作Xml,就用Android所提供的API,不用Java所提供的API,DOM......
  • Android-Kotlin-When&类型推断
    Kotlin的when表达式TextEngine描述文字处理对象:packagecn.kotlin.kotlin_base02/***描述文字处理对象**valtextContent传入进来的文字内容val是常量*/classTextEngine(valtextContent:String){/***处理文字,然后返回*返回完整的字符串......
  • Android-kotlin的继承
    上一篇博客讲了Android-kotlin的配置/入门,然后简单的实现了一个计算器功能。今天我们来讲讲kotlin中的继承是怎样的。1.先看一个案例,子类使用到父类的资源【案例一】父类张翠山:packagecn.kotlin.kotlin_oop03/***描述父对象:张翠山**personDescribe此人的简介/var......
  • Android-kotlin-具名参数
    先看一个这样的案例,【案例一】:packagecn.kotlin.kotlin_base05funshowAction1(country:String,volk:String){println("我的祖国是${country},我的民族是$volk")}funshowAction2(country:String,volk:String){println("我的祖国是${country},我的民族是......
  • 万事俱备面饿了么Android!面完哭了呜呜呜,还是美团香!
    大家应该看过很多分享面试成功的经验,但根据幸存者偏差的理论,也许多看看别人面试失败在哪里,对自己才更有帮助。最近跟一个朋友聊天,他漫不经心地复习了几个月,就去参加了饿了么面试,第二面结束后,嗯,挂了…当天怒清购物车,卸载饿死了么。下面是他回忆整理的凉经:一面(全都会)1.点击图标,应用打......
  • Android-Kotlin-区间与FOR&LIST&MAP简单使用
    区间与for:packagecn.kotlin.kotlin_base04/***区间与for*/funmain(args:Array<String>){/***Kotlin中提供了区间,例如:存入1到100,在Java中可能要写多行代码,而在Kotlin中很简单,代码如下*1..100*/varnumbers=1..100/***......
  • Android-Kotlin-递归与尾递归
    递归:阶乘计算:/***阶乘:*1的阶乘是1,因为1往下走一个楼梯就是0了*2的阶乘是2*1*3的继承是3*2*1*4的继承是4*3*2*1*5的阶乘是5*4*2*1*/packagecn.kotlin.kotlin_base06......