zoukankan      html  css  js  c++  java
  • Android-Kotlin-单例模式

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

    描述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")
    
    }

    执行结果:



     

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

    单例模式案例

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

    把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
    
    }

    执行结果:

     

     

  • 相关阅读:
    mac 10.9 安装 gevent
    flash builder4.7 for Mac升级AIRSDK详解
    重走java--Step 3
    重走java--Step 2
    重走java---Step 1
    web初学之MVC
    web初学之JavaBean
    微信公众号开发之开发模式的启用——学习笔记
    微信公众号开发之开通账号——学习笔记
    web初学之request,session与application
  • 原文地址:https://www.cnblogs.com/android-deli/p/10313658.html
Copyright © 2011-2022 走看看