Android-Kotlin-單例模式

先看一個案例,非單例模式的案例:

描述Dog對象:oop

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

}

 

執行結果:

相關文章
相關標籤/搜索