kotlin对象声明和单例模式(java单例模式)

1.概念

​ 对象声明是专门用来创建单例模式用的。

​ 语法格式:

object ObjectName : [0-N个父类型] {
    //对象声明类体
}

2.特点(对比对象表达式)

  • 对象表达式是表达式,可以用于赋值---对象声明不是表达式,不能用于赋值;
  • 对象表达式能包含内部类,但不能包含嵌套类---对象声明能包含嵌套类,但不能包含内部类;
  • 对象表达式能定义为局部变量(即定义在方法/函数内)---对象声明不能定义在方法/函数内;
  • 对象表达式需要通过声明的对象表达式的变量访问对象---因为对象声明有名字,所以可以直接通过对象声明的名称访问该对象。

3.定义对象声明

fun main() {
    println(Badminton.name)//羽毛球

    println(Running.name)//短跑
    Running.playRules()//在跑道上比赛

    println(Basketball.name)//篮球
    println(Basketball.isBelongSports)//true

    Basketball.playRules()//在篮球场比赛
    println(Basketball.FamousPlayers(ArrayList(listOf("乔丹", "科比", "詹姆斯"))).players)//[乔丹, 科比, 詹姆斯]
}

/**
 * 定义一个运动接口
 */
interface Sports {
    val name: String
}

/**
 * 定义一个球类抽象类
 */
abstract class Ball(val isBelongSports: Boolean) {
    abstract fun playRules()
}

object Badminton : Sports {
    override val name: String
        get() = "羽毛球"
}

object Running {
    val name: String

    init {
        name = "短跑"
    }

    fun playRules() {
        println("在跑道上比赛")
    }
}

object Basketball : Ball(true), Sports {
    override val name: String
        get() = "篮球"

    override fun playRules() {
        println("在篮球场比赛")
    }

    /**
     * 可以定义嵌套类,但不能定义内部类
     */
    class FamousPlayers(val players: ArrayList<String>)
}

4.对象声明和单例模式

​ 对象声明专门用来创建单例模式,因为对象声明对象声明定义的对象是该类的唯一实例,可以通过名称直接访问对象的实例。

fun main() {
    println(Singleton.name)//勒布朗詹姆斯
    Singleton.name = "科比布莱恩特"
    println(Singleton.name)//科比布莱恩特
}

object Singleton {
    var name = "勒布朗詹姆斯"
}
posted @ 2019-06-01 16:52  谢光伟  阅读(870)  评论(0编辑  收藏  举报