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 = "勒布朗詹姆斯"
}